#include "FrequentShower.h" #include #include #include #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(); }