[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);

[Qt 基础内容-05] QDialogButtonBox的更多相关文章
- [Qt基础内容-08] Qt中MVC的M(Model)
Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...
- iOS系列 基础篇 05 视图鼻祖 - UIView
iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...
- 1、js基础内容
js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...
- 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项
046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...
- 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...
- 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用
043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...
- 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述
039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- IO基础内容(File)
JavaIO基础内容 IO技术概述 Output 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 Input 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操 ...
- ROS_Kinetic_09 ROS基础内容(四)
ROS_Kinetic_09 ROS基础内容(四) 参考网址: http://wiki.ros.org/cn/ROS/Tutorials/UsingRosEd http://wiki.ros.org/ ...
随机推荐
- SpringBoot:通过多个Context限制Bean的活动范围
从Spring的包扫描说起 SpringBoot会扫描SpringBootApplication注解标注的类,他所在的包以及这个包的子包,把那里面的Bean注册到applicationContext中 ...
- Qt编写地图综合应用51-离线瓦片地图下载
一.前言 写这个离线地图下载器的初衷,就是为了方便自己的几个需要离线地图的程序,客户需求,既然地图程序已经可以支持离线地图,那如何获取到这些离线瓦片地图文件是个关键,而且这是这个功能的关键,拿到这些一 ...
- [转]xmanager和xshell什么关系 xmanager怎么使用
xmanager是一款小巧实用且运行于Windows系统上的X服务器软件,可以帮助用户快速连接并访问Unix/Linux服务器.那xmanager和xshell什么关系,xmanager怎么使用,本文 ...
- IM通讯协议专题学习(九):手把手教你如何在iOS上从零使用Protobuf
本文作者:丁同舟,来自金蝶随手记技术团队. 1.引言 接上篇<金蝶随手记团队的Protobuf应用实践(原理篇)>,本文将以iOS端的Objective-C代码为例,图文并茂地向您菔救绾卧 ...
- kubernetes系列(七) - Pod生命周期
目录 1. pod生命周期 2. initC 2.1 initC介绍 2.2 initC的作用 2.3 initC的模版 2.4 initC的一些其他补充 3. Pod健康性检查(liveiness) ...
- 【译】在分析器中使用 Meter Histogram(直方图)解锁见解
您是否正在与应用程序中的性能瓶颈作斗争?不要再观望了!Visual Studio 2022 在其性能分析套件中引入了 Meter Histogram(直方图)功能,为您提供了前所未有的分析和可视化直方 ...
- Note -「基本子串结构」速通笔记
学习自 crashed 的<一类基础子串数据结构>摘抄及注解, 略过了一些 crashed 口中 "用不上" 的东西. 这里是速通笔记, 希望快速学习技巧的读者可以 ...
- Pulsar客户端如何控制内存使用
摘要 本文围绕一个常见的使用场景深入分析在高吞吐场景下,使用Pulsar客户端收发消息可能会遇到的若干问题.并以此为切入点,梳理一下Pulsar客户端在内存控制上所做的优化改进. 使用场景 假设这样一 ...
- C#NPOI示例
主程序要添加NPOI的库.代码如下 static void Main(string[] args) { Export(); } public static void Export() { // 创建新 ...
- .net工作流elsa-触发器
必备知识 触发器会用到书签和调度,这个在我的另外两篇文章中有分析. 什么是触发器 可以直接调用流程引擎的IWorkflowRuntime获取IWorkflowClient,然后调用它的CreateAn ...