最近我写项目的时候遇到一个奇怪的需求,要在工作线程内,根据某个情况弹出一个MessageBox

但是Qt提供的MessageBox只可以在gui线程(主线程)使用,于是我就对QMessageBox封装了一下,让其可以在非gui线程内被调用

特新介绍

1.可以在任何线程调用

2.show后和默认的MessageBox一样是阻塞的,MessageBox关闭后才会返回

注意:

1.我只封装了information,如果需要其他的,请做扩展

上源码

申明:

  1. #include <QMessageBox>
  2. #include <QEventLoop>
  3. class JasonQt_ShowInformationMessageBoxFromOtherThread: public QObject
  4. {
  5. Q_OBJECT
  6. private:
  7. const QString m_title;
  8. const QString m_message;
  9. public:
  10. JasonQt_ShowInformationMessageBoxFromOtherThread(const QString &title, const QString &message);
  11. static void show(const QString &title, const QString &message);
  12. private:
  13. void readyShow(void);
  14. private slots:
  15. void onShow(void);
  16. };

定义:

  1. JasonQt_ShowInformationMessageBoxFromOtherThread::JasonQt_ShowInformationMessageBoxFromOtherThread(const QString &title, const QString &message):
  2. m_title(title),
  3. m_message(message)
  4. { }
  5. void JasonQt_ShowInformationMessageBoxFromOtherThread::show(const QString &title, const QString &message)
  6. {
  7. QEventLoop eventLoop;
  8. auto messageBox = new JasonQt_ShowInformationMessageBoxFromOtherThread(title, message);
  9. connect(messageBox, SIGNAL(destroyed()), &eventLoop, SLOT(quit()));
  10. messageBox->readyShow();
  11. eventLoop.exec();
  12. }
  13. void JasonQt_ShowInformationMessageBoxFromOtherThread::readyShow(void)
  14. {
  15. this->moveToThread(qApp->thread());
  16. QTimer::singleShot(0, this, SLOT(onShow()));
  17. }
  18. void JasonQt_ShowInformationMessageBoxFromOtherThread::onShow(void)
  19. {
  20. QMessageBox::information(NULL, m_title, m_message);
  21. this->deleteLater();
  22. }

使用:

  1. JasonQt_ShowInformationMessageBoxFromOtherThread::show("Title", "Message");

http://blog.csdn.net/wsj18808050/article/details/43020563

0

在非gui线程使用QMessageBox的更多相关文章

  1. JMeter非GUI方式运行时动态设置线程组及传参

    http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...

  2. Jmeter 中使用非GUI启动进行压力测试

    使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源.使用命令jmeter -n -t <testplan filename> -l <list ...

  3. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  4. 使用非 GUI 模式运行 JMeter 压力测试

    使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源.使用命令jmeter -n -t <testplan filename> -l <list ...

  5. Jmeter笔记(Ⅲ) Jmeter的非GUI操作

    在启动Jmeter时,我们会看到这样一句提示: 不要使用GUI模式(界面模式)进行负载测试,GUI模式只能用于创建测试和调试.进行负载测试时,需要时用非GUI模式. 那么为什么进行负载测试时一定要用非 ...

  6. jmeter入门非GUI(三)

    配置见https://www.cnblogs.com/wish5714/p/9722193.html 该篇介绍非GUI模式的测试方法,及结果报告分析 简介 使用非 GUI 模式,即命令行模式运行 JM ...

  7. Jmeter(非GUI模式)教程

    前言 使用非 GUI 模式,即命令行模式运行 JMeter 测试脚本能够大大缩减所需要的系统资源.优点如下:1.节约系统资源:无需启动界面,节约系统资源 2.便捷快速:仅需启动命令行,输入命令便可执行 ...

  8. Jmeter非GUI模式启动

    首先我们需要了解,GUI和非GUI模式启动Jmeter对测试的影响:Jmeter可视化界面及监听器展示结果需要消耗负载资源,从而导致,在大并发的情况下GUI方式会导致负载机资源紧张,对性能造成影响 e ...

  9. Jmeter非GUI运行,生成html报告

    一.JMete执行方式 JMeter执行方式有2种,一种是GUI模式,一种是非GUI模式.GUI模式就是界面模式,非GUI模式就是命令行模式.界面模式主要用来编写和调试脚本用的,项目的真正执行最好是采 ...

随机推荐

  1. jQuery 的.data()方法

    jQuery文档对.data()方法的描述: As of jQuery 1.4.3 HTML 5 data- attributes will be automatically pulled in to ...

  2. ConnectivityManager与检查网络连接的使用

    1.ConnectivityManager的作用 ConnectivityManager主要管理和网络管理相关的操作 TelephonyManager则管理和手机.运营商等的相关信息 WifiMana ...

  3. web安全记录

    前端 CSRF 跨站请求伪造 客户端添加伪随机数,后台验证 验证码 中间人攻击 SSL证书加密 xss(跨站脚本攻击)漏洞,微软的字符检验(自动) 文本展示编码处理 做标签展示的文本尤其过滤脚本 Co ...

  4. Apache Spark2.0正式发布

    Apache Spark2.0正式发布 7月26日起Databricks开始提供Apache Spark 2.0的下载,这个版本是基于社区在过去两年的经验总结而成,不但加入了用户喜爱的功能,也修复了之 ...

  5. Android05-UI02布局,自定义控件,ListView

    1.布局 布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些 比较复杂的界面实现 ¨四种基本布局 LinearLayout RelativeLayout FrameLay ...

  6. Mac OS X:Dock 的附加功能

    Dock 提供了可能并非显而易见的有用控件和菜单.通过修饰键的不同组合(如 Option 键.Control 键)及鼠标点按的不同类型(点按与按下及按住),即可使用下列附加功能.本文适用于 Mac O ...

  7. 关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

    原文:关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 关于Microsoft.CSharp.RuntimeBinder.Runtim ...

  8. Flex中如何通过horizontalTickAligned和verticalTickAligned样式指定线图LineChart横竖方向轴心标记的例子

    原文http://blog.minidx.com/2008/12/03/1669.html 接下来的例子演示了Flex中如何通过horizontalTickAligned和verticalTickAl ...

  9. nginx+redis 实现 jsp页面缓存,提升系统吞吐率

    最近在开发的时候,发现之前APP客户端的一部分页面用的是webview交互,这些页面请求很多,打开一套试卷,将会产生100+的请求量,导致系统性能下降.于是考虑在最靠近客户端的Nginx服务器上做Re ...

  10. bind新发现

    function foo(a,b){ this.val = a+b; } var bar = foo.bind(null, 'p1'); var baz = new bar('p2'); consol ...