#include #include #include #include #include #include #include ; #include #include class MainWindow; class loadingWidget : public QWidget { public: bool isRunning = false; QLabel* sign = nullptr; QMovie* movie = nullptr; QTextEdit* initLog = nullptr; fancyButtonText* retryBtn = new fancyButtonText(100,50,"重试","重新进行初始化"); fancyButtonText* manualBtn = new fancyButtonText(180, 50, "离线模式", "离线模式"); QGridLayout* glayout = new QGridLayout(this); QVBoxLayout* vlayout = new QVBoxLayout(this); loadingWidget() { glayout->setAlignment(Qt::AlignCenter); connect(retryBtn, &QPushButton::clicked, [=]() { retryBtn->setDisabled(true); manualBtn->setDisabled(true); start(); }); } void start() { if (isRunning == true) stop(); QPalette palette; palette.setColor(QPalette::WindowText, Qt::white); sign = new QLabel(this); sign->setAlignment(Qt::AlignBottom| Qt::AlignHCenter); movie = new QMovie(":/topBar/icon/loading.gif"); movie->setScaledSize(QSize(100, 100)); movie->start(); sign->setMovie(movie); initLog = new QTextEdit(); initLog->setAlignment(Qt::AlignCenter); initLog->setStyleSheet(QString("background-color: transparent;" "border: 0px solid red;" "border-radius: 0px;")); initLog->setReadOnly(true); QFont font("微软雅黑", 8); initLog->setFont(font); initLog->setTextColor(Qt::white); initLog->append("正在初始化..."); vlayout->addWidget(initLog); QHBoxLayout* btnLayout = new QHBoxLayout(); btnLayout->setAlignment(Qt::AlignLeft); btnLayout->addWidget(retryBtn); retryBtn->hide(); btnLayout->addWidget(manualBtn); manualBtn->hide(); vlayout->addLayout(btnLayout); glayout->addWidget(sign, 0, 0); glayout->addLayout(vlayout, 1, 0); glayout->setRowStretch(0, 5); glayout->setRowStretch(1, 4); //screenshot_ = QPixmap::grabWindow(widget->winId()); update(); // 更新widget以显示新的截图 isRunning = true; } void stop() { if (isRunning == false) return; isRunning = false; delete sign; if (movie != nullptr) delete movie; delete initLog; sign = nullptr; movie = nullptr; initLog = nullptr; } void setError() { if (isRunning == true) { if (movie != nullptr) delete movie; movie = nullptr; sign->setPixmap(QPixmap(":/topBar/icon/error.png")); retryBtn->show(); retryBtn->setEnabled(true); manualBtn->show(); manualBtn->setEnabled(true); } } protected: #if 0 //void paintEvent(QPaintEvent* event) override { // if (paintOnce == false) // return; // if (screenshot_.isNull()) // return; // paintOnce = false; // QImage image = screenshot_.toImage(); // image = image.convertToFormat(QImage::Format_RGB888); // cv::Mat originalMat = cv::Mat( // image.height(), // image.width(), // CV_8UC3, // image.bits(), // image.bytesPerLine()); // cv::Mat blurredMat; // cv::blur(originalMat, blurredMat, cv::Size(10, 10)); // 调整模糊半径以获得不同程度的模糊效果 // QPixmap blurredPixmap = cvMatToQPixmap(blurredMat); // QPainter painter(this); // painter.drawPixmap(0, 0, blurredPixmap); // //QWidget::paintEvent(event); // 调用父类的 paintEvent 函数,绘制控件本身 //} #endif private: QPixmap screenshot_; }; #pragma once