首页 > 其他分享 >笔记 | QDialogButtonBox的使用

笔记 | QDialogButtonBox的使用

时间:2023-09-19 10:34:21浏览次数:29  
标签:QDialogButtonBox 自定义 buttonBox 对话框 使用 示例 笔记 按钮

QDialogButtonBox的基本用法

QDialogButtonBox是Qt的QtWidgets模块中的一个小部件,您可以使用它轻松地添加标准按钮到对话框中。以下是一个基本的使用示例:

#include <QDialog>
#include <QDialogButtonBox>

// 创建一个对话框
QDialog* dialog = new QDialog(this);

// 创建一个QDialogButtonBox
QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, dialog);

// 连接按钮的信号槽
connect(buttonBox, &QDialogButtonBox::accepted, dialog, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, dialog, &QDialog::reject);

// 将QDialogButtonBox添加到对话框中
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget(buttonBox);
dialog->setLayout(layout);

// 显示对话框
int result = dialog->exec();

// 处理对话框的结果
if (result == QDialog::Accepted) {
    // 用户点击了"确定"按钮
} else {
    // 用户点击了"取消"按钮或关闭了对话框
}

在上面的示例中,我们首先创建了一个对话框(QDialog)和一个QDialogButtonBox,并将标准的“确定”和“取消”按钮添加到QDialogButtonBox中。接着,我们将按钮的信号与对话框的acceptreject槽函数连接起来,以处理按钮点击事件。最后,我们将QDialogButtonBox添加到对话框的布局中,并显示对话框。用户点击按钮后,我们可以根据返回值来确定用户的选择。

自定义按钮

除了标准的“确定”和“取消”按钮,您还可以自定义QDialogButtonBox中的按钮。以下是一个示例,演示如何添加一个自定义按钮到对话框中:

QDialogButtonBox* buttonBox = new QDialogButtonBox(Qt::Horizontal, dialog);

QPushButton* customButton = new QPushButton("Custom Button");
buttonBox->addButton(customButton, QDialogButtonBox::ActionRole);

connect(customButton, &QPushButton::clicked, this, &MyClass::customButtonClicked);

在上面的示例中,我们首先创建了一个空的QDialogButtonBox,然后创建了一个自定义按钮(customButton),并将其添加到QDialogButtonBox中。我们还使用了QDialogButtonBox::ActionRole来指定这是一个自定义操作按钮。最后,我们连接了自定义按钮的clicked信号到一个槽函数(customButtonClicked),以便在用户点击按钮时执行自定义操作。

设置按钮布局

QDialogButtonBox允许您在水平或垂直方向上排列按钮。在上述示例中,我们使用了Qt::Horizontal来水平排列按钮。如果您想垂直排列按钮,只需将构造函数中的第二个参数更改为Qt::Vertical即可。


QDialogButtonBox中的clicked(QAbstractButton*)槽是一个特殊的槽函数,用于捕获与对话框按钮的交互。当用户单击对话框中的任何按钮时,不论是标准按钮还是自定义按钮,都会发射这个槽。该槽接受一个QAbstractButton*参数,该参数表示用户单击的按钮对象。

以下是一个示例,演示如何使用clicked(QAbstractButton*)槽:

connect(buttonBox, &QDialogButtonBox::clicked, this, &MyClass::handleButtonClick);

// ...

void MyClass::handleButtonClick(QAbstractButton* button) {
    if ((QPushButton *)button == buttonBox->button(QDialogButtonBox::Save)) {
        // 用户单击了"保存"按钮
        // 执行保存操作
    } else if ((QPushButton *)button == buttonBox->button(QDialogButtonBox::Cancel)) {
        // 用户单击了"取消"按钮
        // 执行取消操作
    } else {
        // 处理其他按钮的点击事件
    }
}

在上面的示例中,我们首先连接了QDialogButtonBoxclicked(QAbstractButton*)信号到handleButtonClick槽。然后,在handleButtonClick槽中检查button参数以确定用户单击的是哪个按钮。通过比较buttonQDialogButtonBox中的按钮,我们可以根据不同的按钮执行不同的操作。

标签:QDialogButtonBox,自定义,buttonBox,对话框,使用,示例,笔记,按钮
From: https://blog.51cto.com/u_16215707/7522150

相关文章

  • 《基础语法篇》trunc的使用
    日期selectsysdatefromdual--当时日期selecttrunc(sysdate)fromdualselecttrunc(sysdate,'DD')fromdual--今天日期selecttrunc(sysdate,'d')+7fromdual--本周星期日selecttrunc(sysdate,'dy')+7fromdual--本周星期日selecttrunc(s......
  • 使用CreateFile()打开COM10及以上串行口
    Win32API函数CreateFile()除了可打开普通文件外,还可以打开设备,比如可用于打开串口,获得串口句柄。使用CreateFile()函数打开串口时文件共享模式应设置为0(表示独占),创建参数设置为OPEN_EXISTING,模板必须设置为NULL。如果为COM1至COM9,可使用“COM1”-“COM9”作为文件名传递给Creat......
  • 关于使用LoadResource、EndUpdateResource的问题
    需要操作资源DLL中的资源,自作聪明的将其写成一个如下的类://---------------------------------------------------------------------------#ifndefUnit2H#defineUnit2H#include<windows.h>#include<assert.h>//-------------------------------------------------------......
  • SQLite在VC下的使用
    一、SQLite简介SQLite是用C语言编写的开源数据库,主要用于嵌入式,你也可以把它集成在自己的桌面程序中,也有人将其替代Access,用作后台数据库。SQLite支持多数SQL92标准,例如:索引、限制、触发和查看支持。支持NULL、INTEGER、REAL、TEXT和BLOB数据类型,支持事务。二、下载SQLi......
  • centos7使用mysql压缩包安装mysql5.7
    centos7使用mysql压缩包安装mysql5.71、安装相关的命令环境安装vim命令yum-yinstallvim*安装netstat命令yum-yinstallnet-tools2、上传mysql压缩包到/usr/local/并解压重名mysql-5.7.37-el7-x86_64.tar.gz解压mysql安装包tar-zxvfmysql-5.7.37-el7-x86_64.t......
  • 如何在vuejs项目中使用md5加密密码的实现
    1、NPM安装:npminstall--savejs-md52、全局用法2.1、全局引用importmd5from'js-md5';Vue.prototype.$md5=md5;2.2、全局使用将您需要加密的信息放进去:this.$md5('Thisisencryptedcontent')//6f43dd5db792acb25d6fe32f3dddac703.局部用法在页面中单独使用......
  • Springboot使用@value获取配置文件参数
    使用@value获取yml参数值@Value("${value}")//多级使用.连接例:${value.value}privateStringvalue;@value获取不到值的情况//错误1:使用了static或者final修饰valueprivatestaticStringvalue;privatefinalStringvalue;//错误2:类没有加上@Component(或者@Ser......
  • 使用CQRS和Event Sourcing实现高性能.NET应用程序
    摘要本文介绍了如何使用CQRS(命令查询职责分离)和EventSourcing在.NET应用程序中实现高性能和可扩展性。我们将在一个具体的业务场景中应用这些模式,以演示它们如何解决实际问题。引言随着业务的发展和用户需求的增加,我们作为.NET程序员需要考虑如何提高应用程序的性能和可扩展性......
  • Taro的架构与使用价值
    随着移动互联网和智能设备的普及,前端开发人员需要采用多端同构技术来适配不同的终端(小程序、App和Web)。这些终端之间存在着明显的差异,包括浏览器引擎、操作系统、交互方式以及代码语言等方面。这些差异给前端开发人员带来了不少挑战。一方面,不同终端采用不同的浏览器引擎和操作系......
  • pandas使用 - 取数据
    涉及的几个类pandas.core.frame.DataFrame:表示二维数据,比如:表格数据pandas.core.series.Series:表示一维数据,比如:一行数据,或一列数据 取行用法DataFrame[row_slice]DataFrame.loc[rowName|rowName_slice|rowName_list]DataFrame.iloc[row|row_slice|row_list]取一......