按照VC中的思想,使用messageBox,因此查了一下QT下MessageBox的使用方法,找了下面这篇文章,验证过后没有发现问题。

先来看一下最熟悉的QMessageBox::information。我们在以前的代码中这样使用过:
QMessageBox::information(NULL,  "Title",  "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
下面是一个简单的例子:
现在我们从API中看看它的函数签名:
static StandardButton QMessageBox::information ( QWidget * parent,  const QString & title,  constQString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );
首先,它是static的,所以我们能够使用类名直接访问到(怎么看都像废话…);然后看它那一堆参数,第一个参数parent,说明它的父组件;第二个参数title,也就是对话框的标题;第三个参数text,是对话框显示的内容;第四个参数buttons,声明对话框放置的按钮,默认是只放置一个OK按钮,这个参数可以使用或运算,例如我们希望有一个Yes和一个No的按钮,可以使用 QMessageBox::Yes | QMessageBox::No,所有的按钮类型可以在QMessageBox声明的StandarButton枚举中找到;第五个参数defaultButton就是默认选中的按钮,默认值是NoButton,也就是哪个按钮都不选中。这么多参数,豆子也是记不住的啊!所以,我们在用QtCreator写的时候,可以在输入QMessageBox::information之后输入(,稍等一下,QtCreator就会帮我们把函数签名显示在右上方了,还是挺方便的一个功能!
Qt提供了五个类似的接口,用于显示类似的窗口。具体代码这里就不做介绍,只是来看一下样子吧!
QMessageBox::critical(NULL,  "critical",  "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
QMessageBox::warning(NULL,  "warning",  "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
QMessageBox::question(NULL,  "question",  "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
QMessageBox::about(NULL,  "About",  "About this application");
请注意,最后一个about()函数是没有后两个关于button设置的按钮的!
QMessageBox对话框的文本信息时可以支持HTML标签的。例如:
QMessageBox::about(NULL,  "About",  "About this <font color='red'>application</font>");
运行效果如下:
如果我们想自定义图片的话,也是很简单的。这时候就不能使用这几个static的函数了,而是要我们自己定义一个QMessagebox来使用:
QMessageBox message(QMessageBox::NoIcon,  "Title",  "Content with icon."); 
message.setIconPixmap(QPixmap( "icon.png")); 
message.exec();
这里我们使用的是exec()函数,而不是show(),因为这是一个模态对话框,需要有它自己的事件循环,否则的话,我们的对话框会一闪而过哦(感谢laetitia提醒).

需要注意的是,同其他的程序类似,我们在程序中定义的相对路径都是要相对于运行时的.exe文件的地址的。比如我们写"icon.png",意思是是在.exe的当前目录下寻找一个"icon.png"的文件。这个程序的运行效果如下:

还有一点要注意,我们使用的是png格式的图片。因为Qt内置的处理图片格式是png,所以这不会引起很大的麻烦,如果你要使用jpeg格式的图片的话,Qt是以插件的形式支持的。在开发时没有什么问题,不过如果要部署的话,需要注意这一点。
最后再来说一下怎么处理对话框的交互。我们使用QMessageBox类的时候有两种方式,一是使用static函数,另外是使用构造函数。
首先来说一下static函数的方式。注意,static函数都是要返回一个StandardButton,我们就可以通过判断这个返回值来对用户的操作做出相应。
QMessageBox::StandardButton rb = QMessageBox::question(NULL,  "Show Qt",  "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); 
if(rb == QMessageBox::Yes) 

 QMessageBox::aboutQt(NULL,  "About Qt"); 
}
如果要使用构造函数的方式,那么我们就要自己运行判断一下啦:
QMessageBox message(QMessageBox::NoIcon,  "Show Qt",  "Do you want to show Qt dialog?", QMessageBox::Yes | QMessageBox::No, NULL); 
if(message.exec() == QMessageBox::Yes) 

 QMessageBox::aboutQt(NULL,  "About Qt"); 
}

Qt 中messageBox使用相关推荐

  1. QT 中QTimer 和 startTimer()的区别

    最需要注意一点 请注意,QTimer的准确性取决于底层操作系统和硬件.timerType参数允许您自定义计时器的准确性.有关不同计时器类型的信息,请参见Qt::TimerType.大多数平台支持20毫 ...

  2. QT 中使用 OpenCv 的 CascadeClassifier 报错

    问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fa ...

  3. 【Qt】Qt中使用ssl时报错:qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method

    一.问题 在Qt中使用https,运行时报错: qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method 二.原因分析 SSLv2由 ...

  4. Qt中两种定时器用法

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. 1.QObject类的定时器 QObj ...

  5. Qt中的 Size Hints 和 Size Policies

    sizeHint 这个属性所保存的 QSize 类型的值是一个被推荐给窗口或其它组件(为了方便下面统称为widget)的尺寸,也就是说一个 widget 该有多大,它的一个参考来源就是这个 sizeH ...

  6. Qt中使用多线程的一些心得(一)——继承QThread的多线程使用方法

    一 前言 二Qt多线程方法一 继承QThread 2.1使用多线程的原因分析 2.2 写一个继承于QThread的线程 三 总结 一 前言   本篇文章部分内容参考了该博文:传送门.   Qt中有两种 ...

  7. C++中的stack类、QT中的QStack类

    C++中的stack 实现一种先进后出的数据结构,是一个模板类. 头文件 #include<stack> 用法(以int型为例): stack <int> s; //定义一个i ...

  8. Qt中不规则窗体和部件的实现

    Qt中不规则窗体和部件的实现 描述:a.png 窗口背景图 图片: 描述:mask.png 窗口掩码图 图片: 描述:toolbutton.png 按钮背景图 图片: 描述:toolbutton_ma ...

  9. QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置

    QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置 参考文章: (1)QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置 (2)https:// ...

最新文章

  1. 2018年全球5G的12大趋势
  2. 我是大富豪php源码,最全大富豪3.4源码【自用可运营】含23款子游戏+可控制输赢工具...
  3. 【离散数学】二元关系的闭包
  4. 理解lambda在linq中的应用
  5. Oracle例外处理
  6. 为linux系统引导和登录提供安全加固
  7. 工大瑞普 NP-OSPF综合实验
  8. canon lbp6200 macos下单面双面打印设置
  9. 蔡学镛:写SOP(标准作业程序)就是写程序
  10. 树莓派与普通USB摄像头的连接
  11. 连点器安卓手机版_【百度识图器安卓下载】百度识图器官方app下载 v3.6.0 手机版...
  12. 网站速度优化的三套解决方案
  13. 已知前序序列和中序序列重建二叉树
  14. Unity3D基础语言,引擎实战入门教程
  15. .netcore2.2 windows发布IIS 服务器配置 0x8007000d
  16. 11111122266666
  17. python怎么样自动生成证件照
  18. 业务运营支撑系统  BOSS(Business Operation Support System)。
  19. 使用SQL语句向表中插入多行数据
  20. Mac 超详细入门指南,收藏了!

热门文章

  1. MATLAB - Modbus TCP客户端的使用
  2. matlab 水波模拟 代码,matlab - 在Matlab中模拟一艘在水波中航行的船 - SO中文参考 - www.soinside.com...
  3. 阿里云SaaS生态战略发布:成就亿级营收独角兽
  4. 非匀质化资金池——为什么资产 NFT 化是 DeFi 的必经之路
  5. Windows 10开启ISS Web服务
  6. android控件ListView设置onClick事件
  7. Python+谷歌浏览器--电商秒杀器Selenium自动化爬取
  8. 【选型指南】数字源表/源测量单元/SMU选型的7个重要指标
  9. 59.java编程思想——创建窗口和程序片 Swing
  10. 网络持续演进不仅是技术活儿,还是一个“哲学问题”