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 namespace
{ {
const int BLINK_FREQUENCY = 18; const int BLINK_FREQUENCY = 18;
const int XYWIDGET_WIDTH = 655;
const int XYWIDGET_HEIGHT = 655;
} }
CoordinateXYWidget::CoordinateXYWidget(QWidget* aParent) CoordinateXYWidget::CoordinateXYWidget(QWidget* aParent)
@@ -18,13 +20,15 @@ CoordinateXYWidget::CoordinateXYWidget(QWidget* aParent)
, mBlinking(false) , mBlinking(false)
, mBlinkFrequency(0) , mBlinkFrequency(0)
, mBlinkPoint(QPointF()) , mBlinkPoint(QPointF())
, mBuffer()
, mStopGradientEnd(0.05) , mStopGradientEnd(0.05)
{ {
setFixedSize(655,655); setFixedSize(XYWIDGET_WIDTH, XYWIDGET_HEIGHT);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::startAutoLocate, this, &CoordinateXYWidget::startFlash); connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::startAutoLocate, this, &CoordinateXYWidget::startFlash);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::stopAutoLocate, this, &CoordinateXYWidget::stopFlash); connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::stopAutoLocate, this, &CoordinateXYWidget::stopFlash);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::quitAutoLocate, this, &CoordinateXYWidget::quit); connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::quitAutoLocate, this, &CoordinateXYWidget::quit);
connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::autoLocateXYUpdated, this, &CoordinateXYWidget::setBlinkPoint); connect(ScanProcessSequence::getInstance(), &ScanProcessSequence::autoLocateXYUpdated, this, &CoordinateXYWidget::setBlinkPoint);
initBuffer();
hide(); hide();
} }
@@ -33,6 +37,32 @@ CoordinateXYWidget::~CoordinateXYWidget()
mTimer->stop(); 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) void CoordinateXYWidget::paintEvent(QPaintEvent *event)
{ {
Q_UNUSED(event); Q_UNUSED(event);
@@ -43,23 +73,28 @@ void CoordinateXYWidget::paintEvent(QPaintEvent *event)
QPoint center = this->rect().center(); QPoint center = this->rect().center();
QRect rect(center,QPoint(w,h)); QRect rect(center,QPoint(w,h));
p.setRenderHint(QPainter::Antialiasing,true); 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; QPen pen;
pen.setWidth(2); pen.setWidth(2);
pen.setColor(Qt::gray); pen.setColor(Qt::gray);
pen.setStyle(Qt::SolidLine); pen.setStyle(Qt::SolidLine);
p.setPen(pen); 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); p.drawEllipse(center,w/2 - 100,h/2 - 100);
pen.setColor(QColor(0, 224, 255, 255).lighter()); pen.setColor(QColor(0, 224, 255, 255).lighter());
p.setPen(pen); p.setPen(pen);

View File

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

View File

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

View File

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