QT多线程及通过事件进行通信(通过自定义事件,然后QApplication::postEvent给主界面,我之前用的是信号槽)

摘要:
跨平台多线程开发可以通过QThread实现,Qt库负责特定平台上的特定多线程实现。classMyThread:publicQThread{public:MyThread();public:Dialog*parent;public:voidrun();};其中,parent存储线程创建的窗口,即线程的父线程。它主要用于子线程向父线程发送特定事件以进行线程间通信。自定义消息必须首先包含头文件:#include<QEvent>,然后定义自己的事件值:constQEvent::TypeMyEvent=1234;然后,在run函数中,使用:QApplication::postEvent;发送事件。父线程可以通过重写虚拟函数event:boolDialog::event{if{QMessageBox::information(this,“information”,“Thisissonsentedsignal!

可以通过QThread实现跨平台的多线程开发,Qt库负责在特定平台上的特定多线程实现。要采用QThread进行多线程开发,首先需要包含头文件:

#include <QThread>
然后需要从QThread继承一个自己的线程类,暂作MyThread,关键是要实现QThread内的一个虚函数run。在run函数内部,最后一般都调用exec(),使得线程进入事件循环,否则线程主函数run运行结束,线程也就退出了。
class MyThread : public QThread
{
public:
MyThread();
public:
Dialog *parent;
public:
void run();
};
其中,parent存储的是创建该线程的窗口,也就是该线程的父线程,主要用于该子线程向父线程发送特定事件,以便进行线程间通信。
自定义消息首先需要包含头文件:
#include <QEvent>
然后定义自己的事件值:
const QEvent::Type MyEvent = (QEvent::Type)1234;
然后在run函数里面(实际上是指在任何你想要和父线程进行通信的地方,我这里简化为就是在run函数内部了)通过:
QApplication::postEvent(parent, new QEvent(MyEvent));
将该事件发送出去。
父线程内通过改写虚函数event,来使得能够捕获消息:
bool Dialog::event(QEvent *event)
{
if (event->type() == MyEvent)
{
QMessageBox::information(this, "INFORMATION", "This is son sented signal!");
return true;
}
return QWidget::event(event);
}
这样,两个线程就能够同时运行并能够进行线程间通信了。

http://www.cnblogs.com/bingcaihuang/archive/2011/03/16/1985971.html

免责声明:文章转载自《QT多线程及通过事件进行通信(通过自定义事件,然后QApplication::postEvent给主界面,我之前用的是信号槽)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker 制作Nginx镜像【一步一步入坑ABP VNEXT】安装ABP CLI下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

工控安全入门分析

转载(http://bobao.360.cn/learning/detail/659.html) 0x00写在前面 工业4.0,物联网趋势化,工控安全实战化。安全从业保持敏感,本篇以科普角度对工控安全做入门分析,大牛绕过,不喜轻喷。 0x01专业术语 SCADA:数据采集与监视控制系统 ICS:工业控制系统 DCS:分布式控制系统/集散控制系统 PC...

Jmeter核心-慧测课堂笔记

自动化测试平台-Httprunner-接口、UI、协议。 平台语言-JAVA-UI-Selenium(java版的)、Appium(java版的)、接口-Httpclient、Jmeter。(Jmeter性能测试工具,可以做接口自动化,java写的。) 平台语言-Python-locust(接口、性能)。 linux下载tgz格式的,windows下载gp...

C#中WinForm程序退出方法技巧总结

C#中WinForm程序退出方法技巧总结 一、关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close();Application.Exit();Application.ExitThread();System.Environment.Exit(0);等他们各自的方法不一样,下面我们就来详细介绍一下。 1.this.Close();只...

vue指令(7)v-on

理论知识 双向数据绑定中,数据有多个来源,包括后台业务数据,用户网页操作数据等。对于用户网页操作,vue提供了事件机制,对用户操作做出反应。 使用方式 v-on:标准事件='事件处理逻辑'。 标准实践包括点击(click)、焦点(focus)等。在标签中使用时有四种方式,以点击事件为例 < button v-on:click='msg++'>...

java--jvm启动的参数

java启动参数共分为三类其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用; 标准参数中比较有用的: verbos...

JDK10

1 局部变量类型推断 1.1 JDK10之前定义变量存在的问题 很多人抱怨Java是一种强类型,需要引入大量的样板代码。很明显类型声明往往被认为不是必要的。 JDK10之前的Java代码总中,声明一个变量是非常繁琐的: package com.sunxiaping; import org.junit.Test; import java.util.Ar...