diff --git a/src/components/CoordinateXYWidget.cpp b/src/components/CoordinateXYWidget.cpp index 41d6598..8e190cd 100644 --- a/src/components/CoordinateXYWidget.cpp +++ b/src/components/CoordinateXYWidget.cpp @@ -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); diff --git a/src/components/CoordinateXYWidget.h b/src/components/CoordinateXYWidget.h index fbe8f89..2325759 100644 --- a/src/components/CoordinateXYWidget.h +++ b/src/components/CoordinateXYWidget.h @@ -2,6 +2,7 @@ #define COORDINATEXYWIDGET_H #include +#include 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 mBuffer; double mStopGradientEnd; }; diff --git a/src/windows/MainWindow.cpp b/src/windows/MainWindow.cpp index 3c1f657..8e56002 100644 --- a/src/windows/MainWindow.cpp +++ b/src/windows/MainWindow.cpp @@ -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); diff --git a/src/windows/MainWindow.h b/src/windows/MainWindow.h index 2cf6458..bc65a94 100644 --- a/src/windows/MainWindow.h +++ b/src/windows/MainWindow.h @@ -63,6 +63,7 @@ private: QTabWidget* mTabWidget; InitializeWidget* mInitializWidget; ShutdownWidget* mShutdownWidget; + QWidget* mScanPage; bool mTabInited;