QT QDialog 对话框显示几秒钟自动关闭

50 篇文章 2 订阅

在实际开发中,我们会有这样一种需求,一个提示框,用户可以手动关闭,或者在用户没有操作的情况下,显示3秒钟然后自动关闭,这样应该怎样做呢?

我们的思路应该是这样的:

1.对话框构造函数里,设置一个定时器

2.定时器槽函数设置为close()

看代码

.h

#ifndef SUBMITSCOREERRORDLG_H
#define SUBMITSCOREERRORDLG_H

#include <QDialog>
#include <QTimer>

enum TipsType
{
    TipsType_Unknown =          0,
    TipsType_Warnning =         1,//警告
    TipsType_Ok =               2//成功
};

namespace Ui {
class TipsDlg;
}

class TipsDlg : public QDialog
{
    Q_OBJECT

public:
    explicit TipsDlg(TipsType type, const QString &msg, QWidget *parent = 0);
    ~TipsDlg();

    void startTimer();

private:
    /**
     * @brief initFrame 初始化对话框
     * @param msg       提示信息
     */
    void initFrame(const QString &msg);

private:
    Ui::TipsDlg *ui;
    TipsType m_type;
    QTimer *m_pTimer;
};

.cpp


#include "tipsdlg.h"
#include "ui_tipsdlg.h"

TipsDlg::TipsDlg(TipsType type, const QString &msg, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::TipsDlg),
    m_type(type)
{
    ui->setupUi(this);
    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);
    setAttribute(Qt::WA_TranslucentBackground);

    initFrame(msg);

    m_pTimer = new QTimer(this);
    m_pTimer->setSingleShot(true);
    connect(m_pTimer, &QTimer::timeout, this, [=](){this->close();});
}

TipsDlg::~TipsDlg()
{
    if(m_pTimer != Q_NULLPTR)
        m_pTimer->deleteLater();

    delete ui;
}

void TipsDlg::startTimer()
{
    m_pTimer->start(3000);
}

void TipsDlg::initFrame(const QString &msg)
{
    if(TipsType_Warnning == m_type)//警告
    {
        ui->iconLabel->setStyleSheet("QLabel{background-image: url(:/qc/warnning);background-repeat:no-repeat;}");
    }
    else if(TipsType_Ok == m_type)//成功
    {
        ui->iconLabel->setStyleSheet("QLabel{background-image: url(:/qc/tips_ok);background-repeat:no-repeat;}");
    }

    ui->tipsLabel->setText(msg);

}

怎么调用呢?

    TipsDlg dlg(TipsType_Ok, "提交评分成功", this->topLevelWidget());
    dlg.setAttribute(Qt::WA_ShowModal, true);
    dlg.startTimer();
    dlg.exec();

  • 9
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值