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

一、前言

        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::TextEditorInteractionTextSelectableByMouse | TextSelectableByKeyboard | TextEditable
Qt::TextBrowserInteractionTextSelectableByMouse | 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::YesRoleYES
QMessageBox::NoRoleNo
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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis数据结构应用场景及原理分析

目录 一、Redis介绍 二、应用场景 2.1 String应用场景 2.2 Hash应用场景 2.3 List应用场景 2.4 Set应用场景 2.5 Zset应用场景 一、Redis介绍 单线程多路复用底层数据结构&#xff1a;全局哈希表&#xff08;key-value&#xff09; 二、应用场景 2.1 String应用…

VBA技术资料MF50:VBA_在Excel中突出显示前3个值

【分享成果&#xff0c;随喜正能量】人受到尊重&#xff0c;不是因为权钱&#xff0c;而是他骨子里透出的&#xff0c;正直与善良。。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高…

ChatGPT 总结数据分析的所有知识点

ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…

day01-ES6新特性以及ReactJS入门

课程介绍 ES6新特性ReactJS入门学习 1、ES6 新特性 1.2、let 和 const 命令 var 之前&#xff0c;我们写js定义变量的时候&#xff0c;只有一个关键字&#xff1a; var var 有一个问题&#xff0c;变量作用域的问题&#xff0c;作用域不可控&#xff0c;就是定义的变量有时会…

嵌入式开发之syslog和rsyslog构建日志记录

1.syslogd作客户端 BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.Usage: syslogd [OPTIONS]System logging utility-n Run in foreground-O FILE Log to FILE (default:/var/log/messages)-l N Log only messages more urge…

自动化备份方案

背景说明 网上有很多教程&#xff0c;写的都是从零搭建一个什么什么&#xff0c;基本上都是从无到有的教程&#xff0c;但是&#xff0c;很少有文章提及搭建好之后如何备份&#xff0c;我觉得备份才是一个系统生命周期内永恒的主题&#xff0c;是一个值得花时间严肃对待的问题…

Leetcode328 奇偶链表

思路&#xff1a;分别处理奇偶&#xff0c;保存奇偶的第一个和最后一个节点&#xff0c;注意最后链接的时候需要把偶数的next去掉再拼接不然就成环了 class Solution:def oddEvenList(self, head: ListNode) -> ListNode:if not head or not head.next or not head.next.ne…

设计模式--模板方法模式(Template Method Pattern)

一、什么是模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的实现延迟到子类中。模板方法模式允许在不改变算法的…

OpenCV c++ 使用imshow显示灰色窗口

OpenCV使用imshow显示灰色窗口 原因是使用了system(‘pause’);函数&#xff0c;只需要将该函数去掉&#xff0c;使用opencv中的对应函数 waitKey(0) 即可实现同样效果。 system(“pause”); 改为&#xff1a; cv::waitKey(0); 显示效果&#xff1a;

适配ADRC自抗扰控制算法的MFP450-ADRC 套件焕新而来

关注 FMT 开源自驾仪的开发者可能知道&#xff0c;早在 2018 年 7 月 FMT开源自驾仪的早期版本就已经实现了 ADRC 算法。 经过几年的发展&#xff0c;FMT 在自抗扰控制算法的适配上做了进一步的优化&#xff0c;为了方便科研工作者和开发者快速上手&#xff0c;我们针对搭载 F…

并发编程的故事——共享模型之内存

共享模型之内存 文章目录 共享模型之内存一、JVM内存抽象模型二、可见性三、指令重排序 一、JVM内存抽象模型 主要就是把cpu下面的缓存、内存、磁盘等抽象成主存和工作内存 体现在 可见性 原子性 有序性 二、可见性 出现的问题 t线程如果频繁读取一个静态变量&#xff0c;那…

解决Spring Data JPA中的NullPointerException问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

苹果为 Vision Pro 头显申请游戏手柄专利

苹果Vision Pro 推出后&#xff0c;美国专利局公布了两项苹果公司申请的游戏手柄专利&#xff0c;其中一项的专利图如下图所示。据 PatentlyApple 报道&#xff0c;虽然申请专利并不能保证苹果公司会推出游戏手柄&#xff0c;但是苹果公司同时也为游戏手柄申请了商标&#xff0…

性能优化维度

CPU 首先检查 cpu&#xff0c;cpu 使用率要提升而不是降低。其次CPU 空闲并不一定是没事做&#xff0c;也有可能是锁或者外部资源瓶颈。常用top、vmstat命令查看信息。 vmstat 命令: top: 命令 IO iostat 命令&#xff1a; Memory free 命令&#xff1a; 温馨提示&#xff1a…

postgresql-窗口函数

postgresql-窗口函数 简介窗口函数的定义分区选项&#xff08;PARTITION BY&#xff09;排序选项&#xff08;ORDER BY&#xff09;窗口选项&#xff08;frame_clause&#xff09; 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…

因果推断(六)基于微软框架dowhy的因果推断

因果推断&#xff08;六&#xff09;基于微软框架dowhy的因果推断 DoWhy 基于因果推断的两大框架构建&#xff1a;「图模型」与「潜在结果模型」。具体来说&#xff0c;其使用基于图的准则与 do-积分来对假设进行建模并识别出非参数化的因果效应&#xff1b;而在估计阶段则主要…

雅思写作 三小时浓缩学习顾家北 笔记总结(二)

目录 饥饿网一百句翻译 Using government funds for pollution cleanup work can create a comfortable environment. "Allocating government funds to pollution cleanup work can contribute to the creation of a comfortable environment." Some advertise…

ChatGPT的局限性及商业化应用限制讨论

首先&#xff0c;ChatGPT仅使用公开可用的信息&#xff0c;这是其第一个局限。如果基础信息缺失、过时、模糊或过于泛化&#xff0c;AI生成的内容就将不会准确。 只有在使用企业内部专有信息和知识创建特定的GPT时&#xff0c;才会出现真正的商业化解决方案。但对企业而言&…

Opencv基于文字检测去图片水印

做了一个简单的去水印功能&#xff0c;基于文字检测去图片水印。效果如下&#xff1a; 插件功能代码参考如下&#xff1a; using namespace cv::dnn; TextDetectionModel_DB *textDetector0; void getTextDetector() {if(textDetector)return;String modelPath "text_de…

【MySQL】3、MySQL的索引、事务、存储引擎

create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统&#xff0c;能够更快速的查询信…