效果如下:
我写的这个控件,唯一的特点就是不需要新建ui文件,直接使用纯代码实现,还带有阴影背景,代码如下:
h文件
class MyLoadMessage : public QDialog
{Q_OBJECT
public:explicit MyLoadMessage (const QString &text,int timeSec = -1,QWidget *parent = nullptr);~MyLoadMessage (){}
}
cpp文件
#include
#include
MyLoadMessage ::MyLoadMessage (const QString &text, int timeSec, QWidget *parent):QDialog(parent)
{this->setAttribute(Qt::WA_TranslucentBackground, true); this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); this->resize(561,206);this->show();QWidget *widgetPtr = new QWidget(this);widgetPtr->setMaximumSize(561,206);widgetPtr->setStyleSheet(QString("QWidget{background:#F6FBFF;border-radius:4px;}"));QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);shadow->setOffset(0, 0); shadow->setColor(QColor("#444444")); shadow->setBlurRadius(18); widgetPtr->setGraphicsEffect(shadow); QGridLayout *gridLayout = new QGridLayout(this);gridLayout->addWidget(widgetPtr);gridLayout->setMargin(20); this->setLayout(gridLayout);QLabel *labGif = new QLabel(widgetPtr);QMovie *movie = new QMovie(this);movie->setFileName(":/rs_Common/Images/MyMessageBox/loading.gif");labGif->setMovie(movie);movie->start();QLabel *labText = new QLabel(text,widgetPtr);labText->setMinimumSize(300,200);labText->setWordWrap(true); labText->setStyleSheet(QString("QLabel{font:20px Microsoft YaHei;}"));QHBoxLayout *hBoxLayout = new QHBoxLayout(widgetPtr);hBoxLayout->addSpacing(70);hBoxLayout->addWidget(labGif);hBoxLayout->addWidget(labText);hBoxLayout->addSpacing(30);if(timeSec > 0)QTimer::singleShot(timeSec*1000,this,[=](){delete this;});
}
使用方式:
MyLoadMessage *load = new MyLoadMessage ("这是一个测试程序,测试加载弹窗");
MyLoadMessage *load = new MyLoadMessage ("这是一个测试程序,测试加载弹窗",60);