[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连接mysql报错errorCode 0, state 08S01
前言许久未维护的项目需要检查一些数据,重新运行项目发现有create connection SQLException ,具体报错信息是 errorCode 0, state 08S01 . Sprin ...
- Qt程序员必看/关于Qt收费的官方答复
一.答复说明 Qt软件从诞生之日就是GPL/LGPL开源授权和商业授权并存的,开源不代表免费而是为了共享.关于您的问题,我做大致的回复. Qt商用版本的模块是否都是LGPL协议,所有模块是否存在GPL ...
- Qt编写安防视频监控系统56-数据库分页
一.前言 在视频监控系统中也需要对日志记录进行查询显示,有时候查询到的记录并不能一页显示完,最好的做成翻页显示,如果所有记录都在一页显示通过滚动条查看,不是很符合用户习惯,比如搜索引擎的记录也都是分页 ...
- 在Win7 x64环境中将World Wind Java SDK 2.1.0嵌入到Eclipse中的方法
1.解压worldwind-2.1.0.zip. 2.打开Eclipse,依次点击New–>Java project ,输入project的名称WorldWind,一路直到finish.然后就可 ...
- 跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
本文由will分享,个人博客zhangyaoo.github.io,原题"基于Netty的IM系统设计与实现",有修订和重新排版. 1.引言 本文将要分享的是如何从零实现一套基于N ...
- 在Deepin系统上配置微软Windows远程桌面服务
. 前言 本文主要讲解如何在deepin系统上安装和配置Xrdp远程桌面. Xrdp是微软的远程桌面协议(Remote Desktop Protocol, RDP)的开源版本.在Linux系统上安装X ...
- Python绘制土地利用和土地覆盖类型图详解
土地利用和土地覆盖是环境科学和城市规划中的重要概念,它们能够帮助本文理解人与自然的关系,促进可持续发展.随着城市化进程的加快,科学地监测和管理土地资源显得尤为重要.Python作为一种强大的编程语言, ...
- CDS标准视图:PM通知单 I_LocationAnalysisCube
视图名称:PM通知单 I_LocationAnalysisCube 视图类型:分析 视图代码: 点击查看代码 @EndUserText.label: 'Location Analysis - Cube ...
- elsa工作流-调度(安排后台作业)
前言 elsa内部很多地方都会用到后台作业,也就是在后台线程中执行一堆任务,这与我们通常理解的后台作业没有区别. elsa将后台作业也称为调度Schedul,相关功能由Elsa.Scheduling模 ...
- c# Progress<T>
c# Progress<T> 用于显示进度........主要是利用IProgress<T> 的Report(T)方法: private void BtnDownload_Cl ...