qt加载弹窗设计

效果如下:
在这里插入图片描述
我写的这个控件,唯一的特点就是不需要新建ui文件,直接使用纯代码实现,还带有阴影背景,代码如下:
h文件

class MyLoadMessage : public QDialog
{
    
    
    Q_OBJECT
public:
    //加载弹窗方式构建,timeSec为自动关闭时间(单位:s),-1表示不会自动关闭
    explicit MyLoadMessage (const QString &text,int timeSec = -1,QWidget *parent = nullptr);
    ~MyLoadMessage (){
    
    }
}

cpp文件

#include <QGraphicsDropShadowEffect>
#include <QMovie>
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
    shadow->setOffset(0, 0);                //设置阴影偏移
    shadow->setColor(QColor("#444444"));    //设置阴影颜色
    shadow->setBlurRadius(18);              //设置阴影圆角
    widgetPtr->setGraphicsEffect(shadow);   //给嵌套QWidget设置阴影

    //设置背景窗口与显示窗口布局-格栅布局
    QGridLayout *gridLayout = new QGridLayout(this);
    gridLayout->addWidget(widgetPtr);
    gridLayout->setMargin(20);      //给布局器设置边距,设置宽度为阴影的宽度
    this->setLayout(gridLayout);

    //窗口子控件加载,加载gif显示
    QLabel *labGif = new QLabel(widgetPtr);
    QMovie *movie = new QMovie(this);
    movie->setFileName(":/rs_Common/Images/MyMessageBox/loading.gif");
    //movie->setScaledSize(labGif->size());   //自动缩放
    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 ("这是一个测试程序,测试加载弹窗");

//如果窗口60s未释放,将会自动释放关闭
MyLoadMessage *load = new MyLoadMessage ("这是一个测试程序,测试加载弹窗",60);

おすすめ

転載: blog.csdn.net/weixin_42887343/article/details/120958297