• Qt | QDialogButtonBox使用示例


    Qt | QDialogButtonBox使用示例


    1、简介

    QDialogButtonBox类,该类包含很多按钮控件,在窗体(widget)或者对话框(dialog)有多个按钮的时候,为方便管理就可以使用该类成组进行管理。

    当然也可以自行将按钮添加进QDialogButtonBox,它会会自动为用户的桌面环境使用适当的布局。

    一般情况下,对话框里的大多数按钮都会遵循以下几种角色,除非是自定义的功能:

    • 接受
    • 拒绝
    • 帮助
    • 对自身的操作(如重置字段或者更改内容)

    在Qt Designer中的QDialogButtonBox控件就是默认了一个OK和一个Cancel按钮,OK按钮对应接受(accept),Cancel对应拒绝(reject)。


    2、信号和使用示例

    QDialogButtonBox存在四个信号:

    • clicked
    • accepted
    • helpRequested
    • rejected

    前面说了话框里的大多数按钮都会遵循几种角色,倘若现在是一个询问是与否类型的对话框,那么就可以直接使用QDialogButtonBox,并将accept和reject信号连接到QDialog所对应的事件,就可以实现点击确定或者取消后自动关闭当前对话框。

    信号和槽连接代码如下:

    connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
    connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
    
    • 1
    • 2

    如果对话框(QDialog)在关闭前还有某些事情要做,那么可以重写accept和reject即可,示例代码:

    头文件中加入:

    protected slots:
        void accept() override;
        void reject() override;
    
    • 1
    • 2
    • 3

    覆写代码:

    void Dialog::accept()
    {
        qDebug() << "接受";
        done(Accepted);               /* 窗口关闭前发出Accepted信号,不调用该函数窗口不退出 */
    }
    
    void Dialog::reject()
    {
        qDebug() << "拒绝";
        done(Rejected);               /* 窗口关闭前发出Rejected信号,不调用该函数窗口不退出 */
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3、多按钮的点击事件

    除了角色信号外,还有一个点击事件的信号,使用示例:

    void Dialog::on_buttonBox_clicked(QAbstractButton *button)
    {
        if(button == ui->buttonBox->button(QDialogButtonBox::Ok))
        {
            qDebug() << "确定被按下";
        }else if(button == ui->buttonBox->button(QDialogButtonBox::Cancel))
        {
            qDebug() << "取消被按下";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ends…

  • 相关阅读:
    springboot毕设项目高校宿舍管理系统的设计与实现ukgdt(java+VUE+Mybatis+Maven+Mysql)
    整理笔记——射频基础知识
    使用easyexcel将csv转为excel
    2022 华数杯 B 题 水下机器人的组装计划
    FTP服务配置和使用
    【机器学习300问】68、随机初始化神经网络权重的好处?
    倩女幽魂手游攻略:云手机自动搬砖辅助教程!
    Ubuntu系统下把视频转换成gif图片
    loj 10078 / 一本通 1500 / 洛谷 P5764【最短路】【dfs枚举排列】
    搭建嵌入式GDB调试环境以及VSCode+gdbserver 图形化调试
  • 原文地址:https://blog.csdn.net/qq153471503/article/details/127800435