在非gui线程使用QMessageBox
最近我写项目的时候遇到一个奇怪的需求,要在工作线程内,根据某个情况弹出一个MessageBox
但是Qt提供的MessageBox只可以在gui线程(主线程)使用,于是我就对QMessageBox封装了一下,让其可以在非gui线程内被调用
特新介绍
1.可以在任何线程调用
2.show后和默认的MessageBox一样是阻塞的,MessageBox关闭后才会返回
注意:
1.我只封装了information,如果需要其他的,请做扩展
上源码
申明:
- #include <QMessageBox>
- #include <QEventLoop>
- class JasonQt_ShowInformationMessageBoxFromOtherThread: public QObject
- {
- Q_OBJECT
- private:
- const QString m_title;
- const QString m_message;
- public:
- JasonQt_ShowInformationMessageBoxFromOtherThread(const QString &title, const QString &message);
- static void show(const QString &title, const QString &message);
- private:
- void readyShow(void);
- private slots:
- void onShow(void);
- };
定义:
- JasonQt_ShowInformationMessageBoxFromOtherThread::JasonQt_ShowInformationMessageBoxFromOtherThread(const QString &title, const QString &message):
- m_title(title),
- m_message(message)
- { }
- void JasonQt_ShowInformationMessageBoxFromOtherThread::show(const QString &title, const QString &message)
- {
- QEventLoop eventLoop;
- auto messageBox = new JasonQt_ShowInformationMessageBoxFromOtherThread(title, message);
- connect(messageBox, SIGNAL(destroyed()), &eventLoop, SLOT(quit()));
- messageBox->readyShow();
- eventLoop.exec();
- }
- void JasonQt_ShowInformationMessageBoxFromOtherThread::readyShow(void)
- {
- this->moveToThread(qApp->thread());
- QTimer::singleShot(0, this, SLOT(onShow()));
- }
- void JasonQt_ShowInformationMessageBoxFromOtherThread::onShow(void)
- {
- QMessageBox::information(NULL, m_title, m_message);
- this->deleteLater();
- }
使用:
- JasonQt_ShowInformationMessageBoxFromOtherThread::show("Title", "Message");
http://blog.csdn.net/wsj18808050/article/details/43020563
- 0
在非gui线程使用QMessageBox的更多相关文章
- JMeter非GUI方式运行时动态设置线程组及传参
http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...
- Jmeter 中使用非GUI启动进行压力测试
使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源.使用命令jmeter -n -t <testplan filename> -l <list ...
- Java中的守护线程和非守护线程(转载)
<什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...
- 使用非 GUI 模式运行 JMeter 压力测试
使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源.使用命令jmeter -n -t <testplan filename> -l <list ...
- Jmeter笔记(Ⅲ) Jmeter的非GUI操作
在启动Jmeter时,我们会看到这样一句提示: 不要使用GUI模式(界面模式)进行负载测试,GUI模式只能用于创建测试和调试.进行负载测试时,需要时用非GUI模式. 那么为什么进行负载测试时一定要用非 ...
- jmeter入门非GUI(三)
配置见https://www.cnblogs.com/wish5714/p/9722193.html 该篇介绍非GUI模式的测试方法,及结果报告分析 简介 使用非 GUI 模式,即命令行模式运行 JM ...
- Jmeter(非GUI模式)教程
前言 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源.优点如下:1.节约系统资源:无需启动界面,节约系统资源 2.便捷快速:仅需启动命令行,输入命令便可执行 ...
- Jmeter非GUI模式启动
首先我们需要了解,GUI和非GUI模式启动Jmeter对测试的影响:Jmeter可视化界面及监听器展示结果需要消耗负载资源,从而导致,在大并发的情况下GUI方式会导致负载机资源紧张,对性能造成影响 e ...
- Jmeter非GUI运行,生成html报告
一.JMete执行方式 JMeter执行方式有2种,一种是GUI模式,一种是非GUI模式.GUI模式就是界面模式,非GUI模式就是命令行模式.界面模式主要用来编写和调试脚本用的,项目的真正执行最好是采 ...
随机推荐
- 远程控制利器TeamViewer使用教程(图)
TeamViewer是什么? 他是一款免费的可以穿透内网的远程控制软件,可以实现桌面共享,文件传送等功能,简单一点说就是和QQ远程协助一样,但是比QQ的远程协助功能更为强大. TeamViewer与木 ...
- mysql导出命令
数据库备份 /data/mysql/bin/mysqldump -hlocalhost -u'root' -p'do' my_db --single-transaction -q | gzip > ...
- jquery编写的简单日历
以前在开发web页面的时候遇到日历,都是直接引入一些日历组件来用,一直不太明白实现原理,总感觉挺复杂的. 今天尝试着用jquery写了一个简单的日历功能,可以选择年份,月份,返回今天,原来简单的日历功 ...
- [转]JavaScript ES6 class指南
[转]JavaScript ES6 class指南 前言 EcmaScript 2015 (又称ES6)通过一些新的关键字,使类成为了JS中一个新的一等公民.但是目前为止,这些关于类的新关键字仅仅是建 ...
- Keil 中的预处理命令const
在keil中,宏定义是一个重要内容.无参数的宏作为常量,而带参数的宏则可以提供比函数更高的调用效率.但预处理只是进行简单的文本代替,而不做语法检查,所以会存在一些问题. 例如:#define BUFS ...
- SRM 581 D2 L2:SurveillanceSystem,重叠度
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12588 在判断 ‘+’ 的时候使用了 重叠度 的概念,跟一般的 ...
- MFC网页
写网页, 选择MFC,MFC应用程序,其他默认,单击确定 项目类型,选Offce,其他默认,单击下一步 默认,单击下一步 文件拓展名,输入html,其他默认,单击下一步 数据库支持,默认,单击下一步 ...
- Pods 更新后提示Bundle资源找不到
http://www.oschina.net/question/101347_2159145
- <select>标签后循环加入选项<option>——jquery
if (data.ReplaceDataFields != null) { $.each(data.ReplaceDataFields, function (i, item) { ...
- Linux内核源代码解析——用户发送数据包的起源之sendto
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/10162853 Jack:我想知道用户如何把数据发送到 ...