[Qt 基础内容-05] QDialogButtonBox
QDialogButtonBox
本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QDialogButtonBox的功能以及使用
简介#
根据Qt的官方帮助文档中的形容:
QDialogButtonBox是一个放置按钮的盒子,它允许用户添加按钮,并自动按照当前的桌面环境来选择合适的布局。
不同的桌面对应的布局如下:
QDialogButtonBox主要有如下几个点:
-
排序的模式
这个排序的模式主要对应QDialogButtonBox中的ButtonRole,这个中文翻译翻译成按钮的角色。在QMessageBox中addButton时也要传这个ButtonRole参数,当时我就对这个参数的内容和作用一知半解,虽然有在论坛里找到大神的解释,但是也不是很明白。博客如下Qt ButtonRole参数的作用。在看帮助文档对于QDialogButtonBox的介绍时,突然就对这个ButtonRole的作用豁然开朗。
原来,这个ButtonRole的作用是配合桌面系统来安排对话框按钮的位置。选择不同的Role按钮就会根据桌面系统,来放置到不同的位置。代码试验如下:
先是设置成ButtonRole::HelpRoleQPushButton *pushButton = new QPushButton("Button", this); ui->buttonBox->addButton(pushButton, QDialogButtonBox::HelpRole);
然后再设置成ButtonRole::ResetRole
QPushButton *pushButton = new QPushButton("Button", this); ui->buttonBox->addButton(pushButton, QDialogButtonBox::ResetRole);
由上,就可以看出,ButtonRole的作用就是控制按钮的布局位置。
-
默认按钮(defaultButton)
对于这个QDialogButtonBox可以设置一个默认的按钮,也就是你按下回车(Enter)键时,默认按下的按钮。在界面上展示就是:
QPushButton *pushButton = new QPushButton("Button", this); pushButton->setDefault(true); ui->buttonBox->addButton(pushButton, QDialogButtonBox::ResetRole);
调用QPushButton::setDefaule函数来设置为默认按钮。
-
按钮布局的方向(Orientation)
这个决定了按钮的布局方向,是水平的还是垂直的。
调用setOrientaion(Qt::Orientation orientation)来设置方向,Qt::Orientation有两个值:Qt::Horizontal 和Qt::Vertical。 -
centerButton
此属性保持按钮框中的按钮是否居中,实际呈现效果如下:
- 不设置居中时:
- 设置居中后
信号和槽#
主要的信号有下面这些,当加入的按钮的ButtonRole是AcceptRole、YesRole、RejectRole和NoRole、HelpRole时,会有对应的信号触发
-
voidQDialogButtonBox::clicked(QAbstractButton *button)
这个信号在点击内部的按钮时,会触发,并且信号的参数是点击的按钮。连接这个信号,可以实现不同的功能。
-
当按钮的ButtonRole为AcceptRole或者YesRole时,会触发void QDialogButtonBox::accepted()
-
当按钮的ButtonRole为RejectRole或者NoRole时,会触发void QDialogButtonBox::rejected()
-
当按钮的ButtonRole为HelpRole时,会触发void QDialogButtonBox::helpRequested()
基本使用#
根据Qt的帮助文档中的介绍,QDialogButtonBox可以添加自定义的按钮,也可以添加StandardButton,下面是两种方法来创建:
-
创建自定义按钮
QPushButton *findButton = new QPushButton(tr("&Find")); findButton->setDefault(true); QPushButton *moreButton = new QPushButton(tr("&More")); moreButton->setCheckable(true); moreButton->setAutoDefault(false); ui->buttonBox->addButton(findButton, QDialogButtonBox::NoRole); ui->buttonBox->addButton(moreButton, QDialogButtonBox::NoRole);
-
创建标准按钮
ui->buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
作者:师从名剑山
出处:https://www.cnblogs.com/codegb/p/16653438.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具