Files
handleaiuinew/HanddleAI/HandleAiUi-new/front/loadingWidget.h
T
2024-05-19 17:44:58 +08:00

61 lines
1.7 KiB
C++

#include <qwidget.h>
#include <qpainter.h>
#include <Qlabel>
#include <opencv.hpp>
static QPixmap cvMatToQPixmap(const cv::Mat& mat) {
QImage qImg;
if (mat.channels() == 3) {
//cv::cvtColor(mat, mat, cv::COLOR_BGR2RGB);
qImg = QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
}
else {
qImg = QImage((const unsigned char*)(mat.data), mat.cols, mat.rows, mat.step, QImage::Format_Grayscale8);
}
return QPixmap::fromImage(qImg);
}
class loadingWidget : public QWidget {
public:
QLabel* sign;
loadingWidget(QWidget* parent = nullptr) : QWidget(parent) {
sign = new QLabel(this);
}
void setStatus(QWidget* widget) {
screenshot_ = QPixmap::grabWindow(widget->winId());
update(); // 更新widget以显示新的截图
}
protected:
void paintEvent(QPaintEvent* event) override {
if (screenshot_.isNull())
return;
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(15, 15)); // 调整模糊半径以获得不同程度的模糊效果
QPixmap blurredPixmap = cvMatToQPixmap(blurredMat);
QPainter painter(this);
painter.drawPixmap(0, 0, blurredPixmap);
// 在模糊图片上绘制文字
QPalette palette;
palette.setColor(QPalette::WindowText, Qt::white);
QFont font("微软雅黑", 100, QFont::Bold);
QFont font2("微软雅黑", 90, QFont::Bold);
painter.setFont(font);
painter.setPen(Qt::black);
painter.drawText(this->rect(), Qt::AlignCenter, "WAIT");
painter.setFont(font2);
painter.setPen(Qt::white);
painter.drawText(this->rect(), Qt::AlignCenter, "WAIT");
}
private:
QPixmap screenshot_;
};