QDialogButtonBox

本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QDialogButtonBox的功能以及使用

简介

根据Qt的官方帮助文档中的形容:
QDialogButtonBox是一个放置按钮的盒子,它允许用户添加按钮,并自动按照当前的桌面环境来选择合适的布局。
不同的桌面对应的布局如下:

QDialogButtonBox主要有如下几个点:

  1. 排序的模式

      这个排序的模式主要对应QDialogButtonBox中的ButtonRole,这个中文翻译翻译成按钮的角色。在QMessageBoxaddButton时也要传这个ButtonRole参数,当时我就对这个参数的内容和作用一知半解,虽然有在论坛里找到大神的解释,但是也不是很明白。博客如下Qt ButtonRole参数的作用。在看帮助文档对于QDialogButtonBox的介绍时,突然就对这个ButtonRole的作用豁然开朗。
    原来,这个ButtonRole的作用是配合桌面系统来安排对话框按钮的位置。选择不同的Role按钮就会根据桌面系统,来放置到不同的位置。代码试验如下:
    先是设置成ButtonRole::HelpRole

    QPushButton *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的作用就是控制按钮的布局位置。

  2. 默认按钮(defaultButton)

    对于这个QDialogButtonBox可以设置一个默认的按钮,也就是你按下回车(Enter)键时,默认按下的按钮。在界面上展示就是:

    QPushButton *pushButton = new QPushButton("Button", this);
    pushButton->setDefault(true);
    ui->buttonBox->addButton(pushButton, QDialogButtonBox::ResetRole);

    调用QPushButton::setDefaule函数来设置为默认按钮。

  3. 按钮布局的方向(Orientation)

    这个决定了按钮的布局方向,是水平的还是垂直的。
    调用setOrientaion(Qt::Orientation orientation)来设置方向,Qt::Orientation有两个值:Qt::HorizontalQt::Vertical。

  4. centerButton

    此属性保持按钮框中的按钮是否居中,实际呈现效果如下:

    • 不设置居中时:

    • 设置居中后

信号和槽

主要的信号有下面这些,当加入的按钮的ButtonRole是AcceptRoleYesRoleRejectRoleNoRoleHelpRole时,会有对应的信号触发

  1. voidQDialogButtonBox::clicked(QAbstractButton *button)

    这个信号在点击内部的按钮时,会触发,并且信号的参数是点击的按钮。连接这个信号,可以实现不同的功能。

  2. 当按钮的ButtonRole为AcceptRole或者YesRole时,会触发void QDialogButtonBox::accepted()

  3. 当按钮的ButtonRole为RejectRole或者NoRole时,会触发void QDialogButtonBox::rejected()

  4. 当按钮的ButtonRole为HelpRole时,会触发void QDialogButtonBox::helpRequested()

基本使用

根据Qt的帮助文档中的介绍,QDialogButtonBox可以添加自定义的按钮,也可以添加StandardButton,下面是两种方法来创建:

  1. 创建自定义按钮

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

  2. 创建标准按钮

    ui->buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
    | QDialogButtonBox::Cancel, this);

[Qt 基础内容-05] QDialogButtonBox的更多相关文章

  1. [Qt基础内容-08] Qt中MVC的M(Model)

    Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...

  2. iOS系列 基础篇 05 视图鼻祖 - UIView

    iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...

  3. 1、js基础内容

    js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...

  4. 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项

    046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...

  5. 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围

    045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...

  6. 043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用

    043 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 05 do-while循环介绍及应用 本文知识点:do-while循环介绍及应用 do-while循 ...

  7. 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述

    039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...

  8. 基于C/S架构的3D对战网络游戏C++框架 _04客户端详细设计与OpenGL、Qt基础

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  9. IO基础内容(File)

    JavaIO基础内容 IO技术概述 Output 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 Input 把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操 ...

  10. ROS_Kinetic_09 ROS基础内容(四)

    ROS_Kinetic_09 ROS基础内容(四) 参考网址: http://wiki.ros.org/cn/ROS/Tutorials/UsingRosEd http://wiki.ros.org/ ...

随机推荐

  1. springboot连接mysql报错errorCode 0, state 08S01

    前言许久未维护的项目需要检查一些数据,重新运行项目发现有create connection SQLException ,具体报错信息是 errorCode 0, state 08S01 . Sprin ...

  2. Qt程序员必看/关于Qt收费的官方答复

    一.答复说明 Qt软件从诞生之日就是GPL/LGPL开源授权和商业授权并存的,开源不代表免费而是为了共享.关于您的问题,我做大致的回复. Qt商用版本的模块是否都是LGPL协议,所有模块是否存在GPL ...

  3. Qt编写安防视频监控系统56-数据库分页

    一.前言 在视频监控系统中也需要对日志记录进行查询显示,有时候查询到的记录并不能一页显示完,最好的做成翻页显示,如果所有记录都在一页显示通过滚动条查看,不是很符合用户习惯,比如搜索引擎的记录也都是分页 ...

  4. 在Win7 x64环境中将World Wind Java SDK 2.1.0嵌入到Eclipse中的方法

    1.解压worldwind-2.1.0.zip. 2.打开Eclipse,依次点击New–>Java project ,输入project的名称WorldWind,一路直到finish.然后就可 ...

  5. 跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)

    本文由will分享,个人博客zhangyaoo.github.io,原题"基于Netty的IM系统设计与实现",有修订和重新排版. 1.引言 本文将要分享的是如何从零实现一套基于N ...

  6. 在Deepin系统上配置微软Windows远程桌面服务

    . 前言 本文主要讲解如何在deepin系统上安装和配置Xrdp远程桌面. Xrdp是微软的远程桌面协议(Remote Desktop Protocol, RDP)的开源版本.在Linux系统上安装X ...

  7. Python绘制土地利用和土地覆盖类型图详解

    土地利用和土地覆盖是环境科学和城市规划中的重要概念,它们能够帮助本文理解人与自然的关系,促进可持续发展.随着城市化进程的加快,科学地监测和管理土地资源显得尤为重要.Python作为一种强大的编程语言, ...

  8. CDS标准视图:PM通知单 I_LocationAnalysisCube

    视图名称:PM通知单 I_LocationAnalysisCube 视图类型:分析 视图代码: 点击查看代码 @EndUserText.label: 'Location Analysis - Cube ...

  9. elsa工作流-调度(安排后台作业)

    前言 elsa内部很多地方都会用到后台作业,也就是在后台线程中执行一堆任务,这与我们通常理解的后台作业没有区别. elsa将后台作业也称为调度Schedul,相关功能由Elsa.Scheduling模 ...

  10. c# Progress<T>

    c# Progress<T> 用于显示进度........主要是利用IProgress<T> 的Report(T)方法: private void BtnDownload_Cl ...