首次提交
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
#include "FrequentShower.h"
|
||||
#include <QPainter>
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
#include "../Global.h"
|
||||
|
||||
|
||||
|
||||
|
||||
FrequentShower::FrequentShower(QWidget *parent) : QWidget(parent) {
|
||||
setObjectName("设置频率值控件");
|
||||
setFrequent(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::setFrequent(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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user