Qt应用开发(基础篇)——消息对话框 QMessageBox

2023-10-27

一、前言

        QMessageBox类继承于QDialog,是一个模式对话框,常用于通知用户或向用户提出问题并接收答案。

        对话框QDialog

        QMessageBox消息框主要由四部分组成,一个主要文本text,用于提醒用户注意某种情况;一个信息文本informativeText,用于进一步解释警报或向用户询问问题;一个可选的详细文本detailedText,用于在用户请求时提供更多数据,还有就是用于接受用户响应的图标和标准按钮。

QMessageBox msgBox;
msgBox.setWindowTitle("QMessageBox");
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setDetailedText("The document may have been modified externally");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();

     QMessageBox提供一些静态的API(information(), question(), warning(), critical())可以直接打开对话框,根据API自带不同的状态图标,方便我们简单快速的使用,但是提供参数比较少,只有标题、主要文本和按钮,没有实例化的灵活。

int ret = QMessageBox::warning(this, tr("My Application"),
                                   tr("The document has been modified.\n"
                                      "Do you want to save your changes?"),
                                   QMessageBox::Save | QMessageBox::Discard
                                   | QMessageBox::Cancel,
                                   QMessageBox::Save);

二、QMessageBox类

1、text

        该属性表示对话框显示的主要文本,文本可以是纯文本或者富文本,默认为空字符串。

        部件会自动检测文本类型,文本类型默认Qt::AutoText,也可以通过setTextFormat设置。

QString text() const
void setText(const QString &text)

2、detailedText

        该属性表示对话框显示的详细文本,文本为纯文本格式,默认为空字符串。

QString detailedText() const
void setDetailedText(const QString &text)

3、informativeText

        该属性表示对话框显示的信息文本,一般用来做主要文本的扩展,在MAC系统中会以更小的字体显示在主要文本下面,其他系统字体大小和主要文本相同,文本为纯文本格式,默认为空字符串。

QString informativeText() const 
void setInformativeText(const QString &text)

4、icon

        该属性表示对话框显示的系统默认图标,图标默认为空。也可以通过setIconPixmap设置自定义图标。

QMessageBox::Icon icon() const
void setIcon(QMessageBox::Icon)

 5、iconPixmap

        该属性表示当前显示的像素图标,可以通过setIconPixmap自定义需要显示的像素图标。

        一般像素图标不一定会适用于全部的系统,所以如果在跨平台的时候,需要为每个平台绘制适合的图标。

QPixmap iconPixmap() const
void setIconPixmap(const QPixmap &pixmap)

6、standardButtons

        该属性表示需要显示的标准按钮的集合。

QMessageBox::StandardButtons standardButtons() const
void setStandardButtons(QMessageBox::StandardButtons buttons)

        比如你可以这么做

setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
QMessageBox::StandardButton 描述
QMessageBox::Ok 带AcceptRole角色属性的“Ok”按钮
QMessageBox::Open 带AcceptRole角色属性的“Open”按钮
QMessageBox::Save 带AcceptRole角色属性的“Save”按钮
QMessageBox::Cancel 带RejectRole角色属性的“Cancel”按钮
QMessageBox::Close 带RejectRole角色属性的“Close”按钮
QMessageBox::Discard 带DestructiveRole角色属性的基于平台的“Discard”或者“Don't Save”按钮。
QMessageBox::Apply 带AcceptRole角色属性的“Apply”按钮
QMessageBox::Reset 带ResetRole角色属性的“Reset”按钮
QMessageBox::RestoreDefaults 带ResetRole角色属性的“Restore Defaults”按钮
QMessageBox::Help 带HelpRole角色属性的“Help”按钮
QMessageBox::SaveAll 带AcceptRole角色属性的“Save All”按钮
QMessageBox::Yes 带YesRole角色属性的“Yes”按钮
QMessageBox::YesToAll 带YesRole角色属性的“Yes to All”按钮
QMessageBox::No 带NoRole角色属性的“No”按钮
QMessageBox::NoToAll 带NoRole角色属性的“No to All”按钮
QMessageBox::Abort 带RehectRole角色属性的“Abort”按钮
QMessageBox::Retry 带AcceptRole角色属性的“Retry”按钮
QMessageBox::Ignore 带AcceptRole角色属性的“Ignore”按钮
QMessageBox::NoButton 无效按钮

7、textFormat

        该属性表示显示的主要文本格式,默认为Qt::AutoText。

Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat format)

8、textInteractionFlags

        该属性表示对话框的标签文本应该如何和用户交互。

Qt::TextInteractionFlags textInteractionFlags() const
void setTextInteractionFlags(Qt::TextInteractionFlags flags)
Qt::TextInteractionFlag 描述
Qt::NoTextInteraction 不能与文本交互
Qt::TextSelectableByMouse 可以用鼠标选择文本,并使用上下文菜单或标准键盘快捷键将文本复制到剪贴板。
Qt::TextSelectableByKeyboard 可以用键盘上的光标键选择文本。显示一个文本光标。
Qt::LinksAccessibleByMouse 链接可以用鼠标突出显示和激活。
Qt::LinksAccessibleByKeyboard 链接可以使用tab键聚焦,并使用enter键激活。
Qt::TextEditable 文本是完全可编辑的。
Qt::TextEditorInteraction TextSelectableByMouse | TextSelectableByKeyboard | TextEditable
Qt::TextBrowserInteraction TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard

9、公共函数

1)addButton

        添加标准按钮,并添加按钮的角色。

void addButton(QAbstractButton *button, QMessageBox::ButtonRole role)
QPushButton *addButton(const QString &text, QMessageBox::ButtonRole role)
QPushButton *addButton(QMessageBox::StandardButton button)

        如果觉得标准按钮不够灵活,使用addButton()重载,它接受一个文本和一个ButtonRole来添加自定义按钮。QMessageBox使用ButtonRole来确定屏幕上按钮的顺序(根据平台而变化)。可以在调用exec()之后测试clickedButton()的值。

QMessageBox msgBox;
QPushButton *connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole);
QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort);
msgBox.exec();
if (msgBox.clickedButton() == connectButton) {
     // connect
} else if (msgBox.clickedButton() == abortButton) {
     // abort
}

2)button

        返回标准按钮的指针。

QAbstractButton *button(QMessageBox::StandardButton which) const

3)buttons

        返回按钮的集合。

QList<QAbstractButton *> buttons() const

4)buttonRole

        返回按钮的的角色。

QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const

5)removeButton

        移除按钮。

void removeButton(QAbstractButton *button)

6)checkBox

        返回复选框指针。

QCheckBox *checkBox() const

7)setCheckBox

        添加复选框,添加后对话框获得复选框所有权。如果cb设置为空指针,表示删除复选框。

void setCheckBox(QCheckBox *cb)

8)clickedButton

        返回用户按下的按钮指针,可以通过此获取哪个自定义按钮被按下。

QAbstractButton *clickedButton() const

9)defaultButton

         返回默认按钮的指针。

QPushButton *defaultButton() const

10)setDefaultButton

         设置默认按钮,当用户按下Enter的时候触发该按钮。如果未指定默认按钮,QMessageBox将根据消息框中使用的按钮的按钮角色尝试查找一个。

void setDefaultButton(QPushButton *button)
void setDefaultButton(QMessageBox::StandardButton button)

11)buttonRole

        返回按钮角色。

QMessageBox::ButtonRole buttonRole(QAbstractButton *button) const
QMessageBox::ButtonRole 描述
QMessageBox::InvalidRole 无效按钮
QMessageBox::AcceptRole 表示接受Accept,比如ok
QMessageBox::RejectRole 表示拒绝Reject,比如Cancel
QMessageBox::DestructiveRole 表示丢弃并关闭对话框
QMessageBox::ActionRole 表示按下按钮对话框元素会被修改
QMessageBox::HelpRole 表示帮助
QMessageBox::YesRole YES
QMessageBox::NoRole No
QMessageBox::ApplyRole 表示接收当前改变
QMessageBox::ResetRole 表示重置当前改变

12)escapeButton

        返回设置退出按钮指针。

QAbstractButton *escapeButton() const

13)setEscapeButton

        设置退出按钮,指定之后按下ESC键会触发此按钮。

        如果没有指定转义按钮,QMessageBox将尝试使用以下规则找到一个转义按钮:

  • 如果只有一个按钮,则为按Esc时激活的按钮。
  • 如果有“取消”按钮,则是按Esc时激活的按钮。
  • 如果只有一个按钮具有Reject角色或No角色,则它是按Esc时激活的按钮。

        当无法使用这些规则确定退出按钮时,按Esc无效。

void setEscapeButton(QAbstractButton *button)
void setEscapeButton(QMessageBox::StandardButton button)

14)open

        打开对话框并将其finished()或buttonClicked()信号连接到接收器和成员指定的插槽。如果槽函数的第一个参数有一个指针,则连接到buttonClicked(),否则连接到finished(),当对话框关闭的时候,这个信号槽连接会被断开。

void open(QObject *receiver, const char *member)

        实例:打开对话框的同时绑定信号finished与槽函数onMessageBoxFinish,对话框关闭打印信息。

public slots:
    void onMessageBoxFinish();
void MainWindow::onMessageBoxFinish()
{
    qDebug()<<"QMessageBox Finish";
}
QMessageBox msgBox;
msgBox.setWindowTitle("QMessageBox");
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setDetailedText("The document may have been modified externally");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
msgBox.open(this,SLOT(onMessageBoxFinish()));
int ret = msgBox.exec();

15)exec

        重写的exec,一样是模式对话框打开,如果存在标准按钮,返回值表示按下的标准按钮的StandardButton值,如果是自定的按钮,那么这个值不确定,需要根据clickbutton()来确定按下了哪个按钮。

        注意:从QDialog继承来的result()也是返回StandardButton值,而不是QDialog::DialogCode

virtual int exec() override

10、静态函数

        在指定的父小部件前面打开具有给定标题和文本的关键消息模态对话框。

QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)
QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)

        显示一个简单的关于框,其中包含标题和文本。

void about(QWidget *parent, const QString &title, const QString &text)

        显示一个关于Qt的简单消息框,该消息包括应用程序正在使用的Qt版本号,一般用于程序中的help菜单。

void aboutQt(QWidget *parent, const QString &title = QString())

11、信号

        每当在QMessageBox中单击按钮时,就会发出此信号。

void buttonClicked(QAbstractButton *button)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt应用开发(基础篇)——消息对话框 QMessageBox 的相关文章

  • 在 C++ 中,std::string::push_back() 的摊余复杂度是 O(1) 吗?

    我知道标准指定它适用于向量 但是字符串呢 是的 它是摊销常数时间 请参见第 716 页的表 101本文件的 http www open std org jtc1 sc22 wg21 docs papers 2012 n3485 pdf 表
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 无法在表适配器配置属性中找到对象“Web.config”的连接“MyConnName”

    I want to change the query in table adapter but it s not opening throwing an error Configure table Adapter Failed in pro
  • 使用 pthread_cond_signal 优雅地终止线程被证明是有问题的

    我需要发射一堆线程 并希望优雅地将它们拉下来 我正在尝试使用pthread cond signal pthread cond wait实现这一目标 但遇到了问题 这是我的代码 首先是thread main static void thrma
  • 通过 EUSART PIC18F45K80 打印消息

    我正在尝试向 Docklight 发送串行消息 但始终收到空值 我正在使用带有 XC8 MPLAB X 的 PIC18F45K80 我的代码中的所有内容似乎都是正确的 但我想我错了 我该如何修复它 include
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • 如何实现可变虚拟成员函数

    所以我有这个功能 virtual void CallRemoteFunction const char pServerGameObjectId const char pFunctionName OVariant arg1 OVariant
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • 使用 C# 和 .NET Core 在 AWS Cognito 用户池中进行用户管理

    如何使用 C 和 NET Core 3 x 管理 AWS Cognito 用户池中的用户 在文档中找不到有关它的任何内容 Attilio Gelosa 的原创文章 我写这篇文章是希望对其他人有帮助 我必须阅读一页又一页的文档 并从 AWS
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 如何明智地解释这个编译器警告?

    当我执行这段代码时question https stackoverflow com a 51056490 2411320 我收到这个警告 warning format d expects argument of type int but a
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • C 中函数“fgets”的参数太少

    每当我编译这个错误时 我都会收到该错误 但我不知道为什么 我直接从书上抄袭这个 有人可以帮忙吗 include
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • JeeSite 4.1.3 发布,支持一级菜单在顶部,各种组件改进

    开发四年只会写业务代码 分布式高并发都不会还做程序员 gt gt gt 新增 新增参数配置 sys index menuStyle 2 的时候 一级菜单显示在主框架顶部 新增 lang defaultLocale 和 lang defaul
  • JDK1.5新特性一览--转

    JDK1 5 开发代号猛虎 的一个重要主题就是通过新增一些特性来简化开发 这些特性包括泛型 for each 循环 自动装包 拆包 枚举 可变参数 静态导入 使用这些特性有助于我们编写更加清晰 精悍 安全的代码 下面我们简单介绍一下这些新特
  • 数据库概述10(事务)

    MySQL事务 MySQL事务机制主要用于处理操作量大 复杂度高的数据 在MySQL中只有使用了Innodb数据库引擎的数据表和数据库才支持事务 事务处理可以用来维护数据的完整性 保证多条SQL语句要么全部执行 要么全部不执行 事务用于管理
  • vue3实现 下拉框触底加载更多及搜索

    思路 做一个全局指令 查询了大量文章 发现统一用的指令 来实现触底加载功能 实操中发现 在vu3 的版本中 我这个项目中 无法通过自定义指令的形参 获取el select dropdown el select dropdown wrap 元
  • 若依部署在阿里云后,前台dist文件使用nginx服务,接口无法正常使用的问题?

    一 不知道有没有人遇到这个问题 反正我是跟着官网上的一样部署的 但是还是部署过后发现接口无法使用 如下图 一步步解决的 部署后 这种情况在若依本地是能使用的 自己写的接口一直都是这样报错 获取不到数据 二 查阅了很多文档 没找到解决方法 结
  • 03 - Qt 多线程网络通信——套接字

    文章序言 日志1 0 在QT中如何使用TCP协议进行套接字通信 即指网络通信 TCP 和 UDP是传输层协议 二者的区别 TCP是面向连接的流式传输协议 TCP传输 数据安全 UDP是面向无连接的报式传输协议 UDP的传输 数据不安全 比如
  • 小程序中使用分包

    前言 小程序在未使用的分包的情况下仅支持大小为2M 如果图片等资源过多的情况下可以使用分包功能 使用分包的情况下单个分包大小不能超过2M 总大小不能超过20M 分包有两种情况 普通分包和独立分包 下面介绍的是普通分包 官方文档 一 目录结构
  • STM32 使用HAL库做串口的DMA发送和中断接收

    HAL库使用太死板 HAL串口中断接收 HAL库使用起来太不灵活 限制太多 后面如有时间 将使用寄存器和HAL库混合操作的方式 如使用串口中断接收 在接收到数据后 库里做了关闭接收非空中断RXNEIE 如下 HAL库DMA发送 目前 我用的
  • C++ 排序函数用法详解

    C 排序函数用法详解 C STL 标准库提供有很多实用的排序函数 如表 1 所示 通过调用它们 我们可以很轻松地实现对普通数组或者容器中指定范围内的元素进行排序 表 1 C STL 排序函数 函数名 用法 sort first last 对
  • C/C++ printf彩色打印输出

    C C printf彩色打印输出 控制命令 我们常用的printf函数输出来的颜色是终端的配色 如果想要输出不同的颜色进行区分 就需要用到printf的控制命令 033 m 控制命令以 033 开头 以m结尾 而中间则是属性码 属性代码之间
  • 上传ipa报错版本号重复问题,修改版本号

    上传ipa报错版本号重复问题 修改版本号 转自 上传ipa报错版本号重复问题 修改版本号 ipa上传版本号不生效问题 卡乐咪小Y的博客 CSDN博客 很多开发者重新打包时忘记了增加版本号 上传ipa报错 报错关键词ERROR ITMS 90
  • 解决echarts中饼图标签指示线重叠的问题

    饼图中的series有个avoidLabelOverlap属性 avoidLabelOverlap 是否启用防止标签重叠策略 默认开启 在标签拥挤重叠的情况下会挪动各个标签的位置 防止标签间的重叠 var option tooltip tr
  • 解决django需要手动调整数据库,避免manage.py各种报错

    解决方法 首先保存原有表结构的数据 以mysql为例 mysqldump h localhost u用户名 p密码 数据库名 表名称 gt mytable sql 然后手动调整数据库 随便调整 将django中的model调整 对应好了 如
  • 【华为OD机试python】比赛【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 一个有N个选手参加比赛 选手编号为1 N 3 lt N lt 100 有M 3 lt M lt 10 个评委对选手进行打分 打分规则为每个评委对选手打分 最高分10分
  • nuxt创建项目

    Nuxt js 是一个基于 Vue js 的通用应用框架 通过对客户端 服务端基础架构的抽象组织 Nuxt js 主要关注的是应用的 UI 渲染 我们的目标是创建一个灵活的应用框架 你可以基于它初始化新项目的基础结构代码 或者在已有 Nod
  • JS调试干扰系列———无限debugger

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 手段分类 1 简单粗暴型 2 通过eval混淆型 3 利用构造器constructor来执行 二 处理方法 1 粗暴型 2 重构运行逻辑 总结 前言 我刚
  • Java学习 --- mybatisplus配置多数据源

    一 mybatisplus配置多数据源 spring 配置多数据源信息 datasource 配置数据源类型 dynamic 设置默认数据源或者数据源组 primary master strict false datasource mast
  • 74HC04(反相器)和74HC14(反相器、施密特触发器)的具体区别详解

    74HC04和74HC14的具体区别详解 同样具有反相器功能 你知道74HC04和74HC14的具体区别吗 74HC04 对于74HC04很好理解 输入低电平 输出高电平 输入高电平 输出低电平 建议操作条件 下图是TI的74HC04的输入
  • element-ui如何改变主题色

    1 cnpm i element theme g 安装主题工具 从淘宝镜像下载快很多哦 2 npm i element theme default D 拉取代码 3 初始化变量文件 用来修改主题颜色的 并不是主题文件 仅仅用户修改 命令是
  • Qt应用开发(基础篇)——消息对话框 QMessageBox

    一 前言 QMessageBox类继承于QDialog 是一个模式对话框 常用于通知用户或向用户提出问题并接收答案 对话框QDialog QMessageBox消息框主要由四部分组成 一个主要文本text 用于提醒用户注意某种情况 一个信息