上一篇文章介绍了如何使用QDataStream来实现对界面信息的二进制序列化储存和读入操作;采用的是关闭窗口就默认保存界面信息,其实有的时候我们不一定非要对当前版本的信息进行保存,此时可以给用户弹出一个信息对话框让用户选择是否保存配置信息到文件。

信息对话框 QMessageBox

信息对话框是非常常用的界面元素,Qt的实现方式是QMessageBox。QMessageBox的帮助文档读者可以参考Qt的帮助手册:

QmessageBox的属性和方法很多,可以按照普通的类来实例化对象,然后调用对象。不过一般信息对话框只是在需要的时候才会使用,使用完成后希望尽快从内容消除掉,因此在对Qt的信息对话框使用时很少进行实例化,而是直接调用QMessageBox提供的几个常用的静态方法直接使用,常用的QMessageBox的静态方法有如下几个,读者可以自行查阅其帮助文档的描述。

QMessageBox::StandardButton
critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
int
critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButton button0, QMessageBox::StandardButton button1)
QMessageBox::StandardButton
information(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::StandardButton button0, QMessageBox::StandardButton button1 = NoButton)
QMessageBox::StandardButton
question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)
int
question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButton button0, QMessageBox::StandardButton button1)QMessageBox::StandardButton
warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton)
int
warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButton button0, QMessageBox::StandardButton button1)

紧接着上一篇文章的内容,来对closeEvent(QCloseEvent *event)事件函数做一些处理,希望在关闭界面时提醒用户是否保存配置。

首先在头文件包含QMessageBox:

#include <QMessageBox>

在事件函数中构造一个信息对话框。
首先需要定义一个QMessageBox::StandardButton来接受用户选择的控件类型:

QMessageBox::StandardButton reply;   //新建一个StandardButton来储存用户的响应

然后来构造一个信息对话框:

    reply = QMessageBox::information(    //调用静态属性this,                            //父对象指针"Information",                   //对话框标题"Do you want to save the configration information to file?",   //对话框提示信息QMessageBox::Yes|QMessageBox::No);                             //构建用户可以选择的按钮控件

信息对话框的样式如下:

构造了两个按钮供用户选择Yes 和 No,当用户选择No,说明不希望保存信息,直接关闭界面并退出:

f(reply==QMessageBox::StandardButton::No)  //如果用户选择 No按钮,不保存文件 直接退出{QMainWindow::closeEvent(event); //最后将事件处理权交回父类}

如果用户选择是Yes 再继续执行后续的配置信息保存代码。

然后编译运行代码,默认的界面信息如下:

我们做一些修改:

关闭时我们选择No:

再次打开界面内容还是和第一次打开的界面内容一致。

新的closeEvent(QCloseEvent *event)代码如下:

void mainWindow::closeEvent(QCloseEvent *event)
{/*编写你的事件处理函数*/QMessageBox::StandardButton reply;   //新建一个StandardButton来储存用户的响应reply = QMessageBox::information(    //调用静态属性this,                            //父对象指针"Information",                   //对话框标题"Do you want to save the configration information to file?",   //对话框提示信息QMessageBox::Yes|QMessageBox::No);                             //构建用户可以选择的按钮控件if(reply==QMessageBox::No)  //如果用户选择 No按钮,不保存文件 直接退出{return QMainWindow::closeEvent(event); //最后将事件处理权交回父类}//如果用户选择Yes 继续执行下面保存配置的代码QFile file("config.ini");if(!file.open(QIODevice::WriteOnly | QIODevice::Text))return; //打开失败关闭QDataStream out(&file);out.setVersion(QDataStream::Qt_4_0);  //最好设置数据保存版本out<<ui->lineEdit_input->text()              //写入编辑框的值<<qint8(ui->downList->currentIndex());   //写入下拉菜单编号qint8 rowCount = ui->tableWidget->rowCount(); //写入表格行数out<<rowCount;for (int i=0;i<rowCount;i++) {               //写入表格每行内容out<<ui->tableWidget->item(i,0)->text()<<ui->tableWidget->item(i,1)->text();}file.close();                                //关闭文件return QMainWindow::closeEvent(event); //最后将事件处理权交回父类
}

本文介绍了QMessageBox的使用原理并结合代码开发了一个应用场景。后续将继续介绍Qt 界面开发相关的模块。


欢迎同好沟通交流,批评指正,欢迎关注我的公号:不如起而行之

Qt系列文章之 QMessageBox相关推荐

  1. qt系列文章之激光雷达通信

    qt系列文章之激光雷达通信 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 qt通信学习入门之激光雷达通信 文章目录 qt系列文章之激光雷达通信 前言 0.效果 一.通 ...

  2. Qt系列文章001-Qt下载安装

    1 Qt下载 这边只介绍具体的下载地址,本文也是以Qt5.x系列为主,其他版本不涉及,因为Qt目前的大版本是5.x系列,最新版本最近刚更新到5.15.Qt6 于2020年年底发布,预览版已经出了,我尝 ...

  3. Qt系列文章之二十五(使用QAudiolnput获取音频输入)

    文章目录 前言 效果图 QAudioInput获取音频输入功能概述 程序主窗口定义与初始化 音频输入设备支持的格式 开始音频输入 流设备MineDisplayDevice的功能实现 源码获取 前言   ...

  4. Qt系列文章010-Qt容器类介绍

    1 前言    前面已经详细阐述了Qt 中QtGlobal 包含的常用数据类型和方法还有一些宏定义,因为篇幅的问题,所以做了上下两章来讲.方便各位消化和耐看!那么今天这章主要就是讲解Qt 独有的迭代器 ...

  5. 《Qt 数据库详解》博客系列文章

    本文章原创于www.yafeilinux.com 转载请注明出处. 由于该系列文章图床都挂了,特下载原文博客的word版. 详细博客请点附件下载. 21-Qt数据库(一)简介 22-Qt数据库(二)添 ...

  6. Electron系列文章-什么是Electron?

    系列简介:本系列文章首先围绕Electron框架的关键知识点进行详细讲解,然后对DEMO程序进行分析,让前端开发人员对使用Electron开发桌面应用程序有一个初步的了解.该系列文章更新周期为每周1~ ...

  7. 四小时学习opencv+qt系列(第六天)

    四小时学习opencv+qt系列(第六天) 一.图形视图框架 三大类:场景(QGraphicsScene类)视图(QGraphicsView类)图形对象元素(QGraphicsItem及其子类) 1. ...

  8. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  9. 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引

    [源码下载] 积少成多 Flash(ActionScript 3.0 & Flex 3.0) 系列文章索引 作者:webabcd Flash 之 ActionScript 3.0  1.积少成 ...

  10. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)

    前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...

最新文章

  1. Android开发--蓝牙操作
  2. python映射类型-Python 映射类型字典dict操作定义
  3. c++ 通过 myodbc连接到 远程linux 上的mysql server
  4. CTF -杂项密码学,常见密码介绍(一)
  5. Kafka设计解析(五): Kafka Consumer设计解析
  6. iptables(下)规则
  7. 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.5 为跨年度的个人参赛选手构造记录...
  8. 来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家??
  9. 分布式锁的几种实现原理
  10. serlvert jsp mysql_JSP课设之项目管理 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. 吸收塔如何提高吸收率_缺钙了该如何补钙?饮食补钙更健康
  12. hadoop生态--Hive(4)--Hive分区中的动态分区、静态分区
  13. 基于安卓/android/微信小程序的个人健康打卡系统APP-#计算机毕业设计
  14. Python机器学习入门;推荐一本Python数据分析与机器学习入门书籍-唐宇迪《跟着迪哥学 Python数据分析与机器学习实战》PDF+源代码
  15. 银行业客户全面老龄化,该如何应对?
  16. iOS 内购最新讲解
  17. 华为手机桌面有计算机的数字,华为手机桌面上信息图标上显示的数字角标如何关闭...
  18. 试题 基础练习 数列排序
  19. 【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part6基于图谱的问答实现
  20. 【C++入门学习】——MainWindow

热门文章

  1. HTML期末大学生网页设计作业-我的家乡
  2. 对于Java接口的独到理解
  3. iOS基础-小Demo--刮开涂层(刮刮乐效果)
  4. python中seek函数_Python seek()函数
  5. win11右键菜单和win10右键菜单修改
  6. Enterprise Architect 类关系对应解析
  7. vue+websocket+nodejs实现聊天室 -一对多、一对一聊天
  8. 计算机等级考试照片几寸,二寸照片的尺寸是多少?(小二寸和二寸是多少CM分别多大)...
  9. C语言10进制转2进制
  10. 几种常用的服务器认证机制