Files
2024-08-14 11:15:16 +08:00

131 lines
3.3 KiB
C++

#include <qwidget.h>
#include <qpainter.h>
#include <Qlabel>
#include <opencv.hpp>
#include <qmovie.h>
#include <qlayout.h>
#include <qtextedit.h>;
#include <globalStruct.h>
#include <uiModule/components/fancyButton.h>
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