104 lines
3.0 KiB
C++
104 lines
3.0 KiB
C++
#include "FrequentShower.h"
|
|
#include <QPainter>
|
|
#include <QDebug>
|
|
#include <QKeyEvent>
|
|
#include "../Global.h"
|
|
|
|
|
|
|
|
|
|
FrequentShower::FrequentShower(QWidget *parent) : QWidget(parent) {
|
|
setObjectName("设置频率值控件");
|
|
set_frequent(BackEnd::instance()->YsGetFreq());
|
|
}
|
|
|
|
void FrequentShower::paintEvent(QPaintEvent *event) {
|
|
QPainter painter(this);
|
|
QFont font;
|
|
font.setPointSize(calculateOptimalFontSize(mFrequent, {(int)((double)width() * 0.9), height()}, font));
|
|
painter.setFont(font);
|
|
painter.setPen(Qt::black);
|
|
painter.drawText(rect(), Qt::AlignCenter, mFrequent);
|
|
QFontMetrics fontMetrics(font);
|
|
if (selectIndex >= 0 && selectIndex < mFrequent.length()) {
|
|
int a = (QWidget::width() - fontMetrics.horizontalAdvance(mFrequent)) / 2;
|
|
int startX = a + fontMetrics.horizontalAdvance(mFrequent.mid(0, selectIndex));
|
|
int w = fontMetrics.horizontalAdvance(mFrequent[selectIndex]);
|
|
painter.fillRect(startX, 0, w, QWidget::height(), Qt::black);
|
|
painter.setPen(Qt::white);
|
|
painter.drawText(QRect(startX, 0, w, QWidget::height()), Qt::AlignCenter, QString(mFrequent[selectIndex]));
|
|
}
|
|
|
|
}
|
|
|
|
void FrequentShower::keyPressEvent(QKeyEvent *event) {
|
|
BackEnd* g = BackEnd::instance();
|
|
|
|
QString keyText = event->text();
|
|
if (keyText >= "0" && keyText <= "9") {
|
|
mFrequent[selectIndex] = keyText.at(0).toLatin1();
|
|
update();
|
|
return;
|
|
}
|
|
if (g->match(event, "左移")) {
|
|
move(-1);
|
|
} else if (g->match(event, "右移")) {
|
|
move(1);
|
|
} else if (g->match(event, "增加")) {
|
|
change(1);
|
|
} else if (g->match(event, "减小")) {
|
|
change(-1);
|
|
}
|
|
event->ignore();
|
|
|
|
}
|
|
|
|
void FrequentShower::move(int num) {
|
|
selectIndex += num;
|
|
if(selectIndex < 0) {
|
|
selectIndex = 0;
|
|
} else if(selectIndex >= mFrequent.length()) {
|
|
selectIndex = mFrequent.length() - 1;
|
|
}
|
|
if(mFrequent[selectIndex] == '.') {
|
|
if(num > 0) {
|
|
selectIndex++;
|
|
} else {
|
|
selectIndex--;
|
|
}
|
|
}
|
|
update();
|
|
}
|
|
|
|
void FrequentShower::change(int num) {
|
|
if (selectIndex >= 0 && selectIndex < mFrequent.length()) {
|
|
int n = mFrequent[selectIndex].digitValue();
|
|
n += num;
|
|
if (n < 0) {
|
|
n = 9;
|
|
} else if (n > 9) {
|
|
n = 0;
|
|
}
|
|
mFrequent[selectIndex] = QString::number(n)[0];
|
|
update();
|
|
BackEnd::instance()->YsSetFreq(QString(mFrequent).replace('.', "").toULongLong());
|
|
}
|
|
}
|
|
|
|
void FrequentShower::set_frequent(quint64 frequent) {
|
|
QString strNumber = QString::number(frequent, 10);
|
|
int padding = 11 - strNumber.length();
|
|
if (padding > 0) {
|
|
strNumber = QString(padding, '0') + strNumber;
|
|
}
|
|
mFrequent = QString("%1.%2.%3.%4").arg(
|
|
strNumber.mid(0, 2),
|
|
strNumber.mid(2, 3),
|
|
strNumber.mid(5, 3),
|
|
strNumber.mid(8, 3)
|
|
);
|
|
// qDebug() << strNumber << " " << mFrequent;
|
|
update();
|
|
}
|
|
|