fix: Increase the auto locate animation frame rate.

This commit is contained in:
sunwen
2024-06-18 10:19:32 +08:00
parent cc97ef74b7
commit f563c68a7c
4 changed files with 57 additions and 15 deletions

View File

@@ -9,6 +9,8 @@
namespace
{
const int BLINK_FREQUENCY = 18;
const int XYWIDGET_WIDTH = 655;
const int XYWIDGET_HEIGHT = 655;
}
CoordinateXYWidget::CoordinateXYWidget(QWidget* aParent)
@@ -18,13 +20,15 @@ CoordinateXYWidget::CoordinateXYWidget(QWidget* aParent)
, mBlinking(false)
, mBlinkFrequency(0)
, mBlinkPoint(QPointF())
, mBuffer()
, mStopGradientEnd(0.05)
{
setFixedSize(655,655);
setFixedSize(XYWIDGET_WIDTH, XYWIDGET_HEIGHT);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::startAutoLocate, this, &CoordinateXYWidget::startFlash);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::stopAutoLocate, this, &CoordinateXYWidget::stopFlash);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::quitAutoLocate, this, &CoordinateXYWidget::quit);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::autoLocateXYUpdated, this, &CoordinateXYWidget::setBlinkPoint);
initBuffer();
hide();
}
@@ -33,6 +37,32 @@ CoordinateXYWidget::~CoordinateXYWidget()
mTimer->stop();
}
void CoordinateXYWidget::initBuffer()
{
QPen pen;
pen.setWidth(2);
pen.setColor(Qt::gray);
pen.setStyle(Qt::SolidLine);
for(int angle=5; angle<=365; angle+=5)
{
mBuffer[angle] = QPixmap(XYWIDGET_WIDTH, XYWIDGET_HEIGHT);
mBuffer[angle].fill(Qt::transparent);
QPainter bufferPainter(&mBuffer[angle]);
bufferPainter.setRenderHint(QPainter::Antialiasing);
bufferPainter.setPen(pen);
int w = XYWIDGET_WIDTH - 5;
int h = XYWIDGET_HEIGHT - 5;
QConicalGradient coniGrad(w/2,h/2,360-angle);
coniGrad.setColorAt(0,QColor(0,0,0,255));
coniGrad.setColorAt(0.05,QColor(0,170,255,255));
coniGrad.setColorAt(1,QColor(0,0,0,255));
coniGrad.setSpread(QGradient::ReflectSpread);
bufferPainter.setBrush(coniGrad);
bufferPainter.drawEllipse(this->rect().center(),w/2,h/2);
}
}
void CoordinateXYWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
@@ -43,23 +73,28 @@ void CoordinateXYWidget::paintEvent(QPaintEvent *event)
QPoint center = this->rect().center();
QRect rect(center,QPoint(w,h));
p.setRenderHint(QPainter::Antialiasing,true);
QConicalGradient coniGrad(w/2,h/2,360-mAngle);
coniGrad.setColorAt(0,QColor(0,0,0,255));
coniGrad.setColorAt(0.05,QColor(0,170,255,255));
coniGrad.setColorAt(mStopGradientEnd,QColor(0,0,0,255));
coniGrad.setColorAt(1,QColor(0,0,0,255));
coniGrad.setSpread(QGradient::ReflectSpread);
p.setBrush(coniGrad);
QPen pen;
pen.setWidth(2);
pen.setColor(Qt::gray);
pen.setStyle(Qt::SolidLine);
p.setPen(pen);
p.drawEllipse(center,w/2,h/2);
if(mStopGradientEnd < 1)
{
QConicalGradient coniGrad(w/2,h/2,360-mAngle);
coniGrad.setColorAt(0,QColor(0,0,0,255));
coniGrad.setColorAt(0.05,QColor(0,170,255,255));
coniGrad.setColorAt(mStopGradientEnd,QColor(0,0,0,255));
coniGrad.setColorAt(1,QColor(0,0,0,255));
coniGrad.setSpread(QGradient::ReflectSpread);
p.setBrush(coniGrad);
p.drawEllipse(center,w/2,h/2);
}
else
{
p.drawPixmap(0,0, mBuffer[mAngle]);
}
p.setBrush(Qt::NoBrush);
p.drawEllipse(center,w/2 - 100,h/2 - 100);
pen.setColor(QColor(0, 224, 255, 255).lighter());
p.setPen(pen);

View File

@@ -2,6 +2,7 @@
#define COORDINATEXYWIDGET_H
#include <QWidget>
#include <QMap>
class QTimer;
@@ -22,14 +23,15 @@ protected:
private:
void updateFlash();
void updateStopFlash();
void initBuffer();
private:
int mAngle;
QTimer* mTimer;
bool mBlinking;
int mBlinkFrequency;
int mBlinkPointX;
QPointF mBlinkPoint;
QMap<int, QPixmap> mBuffer;
double mStopGradientEnd;
};

View File

@@ -36,6 +36,7 @@ MainWindow::MainWindow(QWidget* aParent)
, mTabWidget(new QTabWidget(this))
, mInitializWidget(new InitializeWidget(this))
, mShutdownWidget(new ShutdownWidget(nullptr))
, mScanPage(nullptr)
, mTabInited(false)
{
mUI->setupUi(this);
@@ -112,6 +113,9 @@ MainWindow::MainWindow(QWidget* aParent)
GUIErrorHandle::Default()->init();
QApplication::setActiveWindow(centralWidget());
//初始化耗时,提前初始化
mScanPage = new ScanFormWidget(this);
mScanPage->hide();
}
MainWindow::~MainWindow()
@@ -188,8 +192,8 @@ void MainWindow::initializeTabWidget()
mTabWidget->insertTab(0,verifyForm, tr("Recon"));
auto selectForm = new SelectFormWidget(this);
mTabWidget->insertTab(0,selectForm, tr("Select"));
auto scanForm = new ScanFormWidget(this);
mTabWidget->insertTab(0,scanForm, tr("Scan"));
//auto scanForm = new ScanFormWidget(this);
mTabWidget->insertTab(0,mScanPage, tr("Scan"));
mTabWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

View File

@@ -63,6 +63,7 @@ private:
QTabWidget* mTabWidget;
InitializeWidget* mInitializWidget;
ShutdownWidget* mShutdownWidget;
QWidget* mScanPage;
bool mTabInited;