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);

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值