QMessageBox手动添加按钮并绑定按钮的信号

这篇具有很好参考价值的文章主要介绍了QMessageBox手动添加按钮并绑定按钮的信号。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视频展示效果(结合代码看效果更佳哦,代码在最下面):

QMessageBox手动添加有重试效果的按钮

效果图: 

qmessagebox 按钮,QT实用技巧(应用),ui,QT,QMessageBox,linux

点击详细文本之后展开如下图:

qmessagebox 按钮,QT实用技巧(应用),ui,QT,QMessageBox,linux 

图标可选:

QMessageBox::Critical 错误图标
QMessageBox::NoIcon 没有图标
QMessageBox::Question 提问图标
QMessageBox::Information 消息图标
QMessageBox::Warning 警告图标

按钮角色可选:

QMessageBox::InvalidRole 无效;设置之后,这个按钮不会出现在弹框里面
QMessageBox::AcceptRole 确定;设置之后,对话框被接受,点击按钮后,弹窗会消失
QMessageBox::RejectRole 取消;设置之后,对话框被拒绝,点击按钮后,弹窗会消失
QMessageBox::DestructiveRole 不保存;设置之后,点击按钮后会导致破坏性更改并关闭弹窗
QMessageBox::ActionRole 激活
QMessageBox::HelpRole 帮助
QMessageBox::YesRole
QMessageBox::NoRole
QMessageBox::ApplyRole 应用
QMessageBox::ResetRole 重置


.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QPushButton>
#include <QTimer>
#include <QDialog>
#define ETIME 10//每次重试的时间
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void slotRetry();
   void slotCountdown();
   void slotClose();
   void slotBtnClick(QAbstractButton* btn);

private:
    Ui::MainWindow *ui;
    QMessageBox *m_mBox;
    QPushButton *m_retryBrn;
    QPushButton *m_closeBtn;
    QTimer *m_tmrRetry;
    int m_iCount;
    int iRetryCount;
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    //ui->setupUi(this);

    m_tmrRetry = new QTimer(this);
    m_tmrRetry->setInterval(1000);
    connect(m_tmrRetry,SIGNAL(timeout()),this,SLOT(slotCountdown()));

    m_mBox = new QMessageBox();
    m_mBox->setIcon(QMessageBox::Critical);//设置图标
    m_mBox->setWindowTitle("错误");//设置对话框标题
    m_mBox->setText("测试说明");//设置副标题
    m_mBox->setInformativeText("今天是个好日子");//设置提示说明
    //m_mBox->setDetailedText("点个关注吧");//设置详细文本
    m_retryBrn = new QPushButton();
    m_closeBtn = new QPushButton();

    //添加按钮的方法
    //..1
    m_retryBrn = m_mBox->addButton("重试",QMessageBox::AcceptRole);
    m_closeBtn = m_mBox->addButton("关闭",QMessageBox::RejectRole);

    //..2
    //    m_retryBrn->setText("重试");
    //    m_closeBtn->setText("关闭");
    //    m_mBox->addButton(m_retryBrn,QMessageBox::AcceptRole);
    //    m_mBox->addButton(m_closeBtn,QMessageBox::RejectRole);

    //_________________________________________
    //绑定按钮槽函数的方法
    //..1
    connect(m_mBox,SIGNAL(buttonClicked(QAbstractButton*)),this,SLOT(slotBtnClick(QAbstractButton*)));
    //..2
    connect(m_retryBrn,SIGNAL(clicked(bool)),this,SLOT(slotRetry()));

    //关闭弹窗后触发的信号
    connect(m_mBox,SIGNAL(destroyed(QObject*)),this,SLOT(slotClose()));

    m_mBox->show();
    m_iCount=0;//已经重试了几次
    iRetryCount=0;//总共重试几次
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::slotRetry()
{
    m_mBox->show();//一定要show,不然点击按钮之后,弹窗就会消失,就看不到倒计时的效果了
    if(m_retryBrn->isEnabled())
    {
        m_retryBrn->setEnabled(false);
        m_closeBtn->setEnabled(false);
    }
    iRetryCount++;
    if(iRetryCount>3)//最多只重试3次
    {
        qDebug() << "重试次数已试完";
        m_mBox->close();
        m_mBox->deleteLater();
        return;
    }
    qDebug() << "重试方式一";
    m_tmrRetry->start();
    m_retryBrn->setText(QString("重试 %1").arg(ETIME));
}

void MainWindow::slotCountdown()
{
    m_mBox->show();
    m_iCount++;
    int iTemp = ETIME - m_iCount;
    if(iTemp<=0)
    {
        //可以在倒计时结束后做你想做的事
        m_tmrRetry->stop();
        m_retryBrn->setEnabled(true);
        m_closeBtn->setEnabled(true);
        m_iCount=0;
        iTemp=ETIME;
    }
    m_retryBrn->setText(QString("重试 %1").arg(iTemp));
}

void MainWindow::slotClose()
{
    qDebug() << "弹窗已关闭";
}

void MainWindow::slotBtnClick(QAbstractButton *btn)
{
    if(btn == m_retryBrn)
    {
        qDebug() << "重试 方法2";
    }
    else if(btn == m_closeBtn)
    {
        qDebug() << "关闭 方法2";
    }
}







 文章来源地址https://www.toymoban.com/news/detail-563680.html

到了这里,关于QMessageBox手动添加按钮并绑定按钮的信号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 遍历多个按钮单击信号带参数,绑定到一个槽

    Qt5最新特性、最高效写法 只查找一级子控件 QList listBtn = ui-gbSel-findChildren(QString(),Qt::FindDirectChildrenOnly); for(int i=0;ilistBtn.count();++i)//++i比i++效率高,i++需要创建临时变量加1 { connect(listBtn[i],QPushButton::clicked,[=]{selCX(i);}); } QT5 写法,也是利用lambda表达式来实现 for(int i=0;igbSel-layout

    2024年01月18日
    浏览(46)
  • Qt信号和槽绑定实例,点击pushbutton按钮触发QLabel文本显示和关闭

    功能简介: 点击qt界面中的open按钮在界面中显示文本,同时按钮变为close按钮,再点击close按钮可以关闭显示文本,同时按钮变为open按钮,继续点击open按钮。。。。。。 关键内容: 1.创建一个qt工程 2.定义一个QPuschButton按钮实例和一个QLabel文本显示实例 3.设置按钮显示内容和

    2024年02月12日
    浏览(44)
  • PyQt6 QMessageBox的使用方法

    放置一个QPushButton就可以。 点击按钮显示QMessageBox

    2024年02月11日
    浏览(38)
  • Qt UI上的按钮和创建的按钮绑定 click 点击事件

    如果在ui 上 的按钮 绑定点击事件,按钮鼠标右键转到槽,点击clicked(),即可创建函数。 动态创建的按钮需要 用 connect 连接

    2024年02月15日
    浏览(53)
  • Qt C++手动创建.ui文件并且与类进行绑定

    前言:有的时候做一些新的窗口时,创建完.cpp和.h后发现没有.ui文件,有些控件纯代码实现就比较费时间,而且微调很麻烦。以下时近一段时间总结的手动给类创建.ui文件并且与所创建的类进行绑定。 1. 首先需要在项目里添加一个Qt Designer Form 选择需要的控件类型,比如QSt

    2024年02月12日
    浏览(42)
  • qt设置tablewidget颜色、添加选择框、添加按钮和进度条

    添加选择框 在代码中设置tablewidget的样式表 设置表格,添加选择框 cellClicked事件响应,当点击表格项,对复选框进行选中和取消选择 添加进度条和按钮 设置表格 建立按钮和处理函数的信号槽连接,让按钮点击,进度条移动 槽函数和进度条控件 项目下载 https://download.csdn.n

    2024年02月11日
    浏览(57)
  • QT进阶------------------QPushButton(快速添加按钮与使用)

          在qt中,通常我们喜欢一个按钮添加一个信号与槽,但是这样写太过浪费时间。要是多个按钮那不是要写30个信号与槽,说实话,我不太喜欢这样。      在ui中,只要拖动按钮,会自动生成按钮的名字,一般都是pushButton,pushButton_2,pushButton_3这样,这样写多了,别人看你

    2024年04月11日
    浏览(40)
  • DAY1,Qt [ 手动实现登录框(信息调试类,按钮类,行编辑器类,标签类的使用)]

    ---mychat.h---头文件 ---mychar.cpp---源文件 ---main.cpp---测试文件 结果---    

    2024年02月14日
    浏览(47)
  • vue前端自定按钮控制手动上传文件

    首先element-ui中的上传组件是这样的 数据结构: { action:“”//上传的连接 filelist:\\\'‘’//选种的文件集合 } 点击按钮后就自动根据action的地址上传,实际上是element-ui自动发送了post请求给action连接,但是我想要通过自己手动上传文件(图片/excel) 直接发送这个文件体 游览器发现无负载

    2024年04月25日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包