QT多线程及通过事件进行通信(通过自定义事件,然后QApplication::postEvent给主界面,我之前用的是信号槽)
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT多线程及通过事件进行通信(通过自定义事件,然后QApplication::postEvent给主界面,我之前用的是信号槽)相关的知识,希望对你有一定的参考价值。
可以通过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给主界面,我之前用的是信号槽)的主要内容,如果未能解决你的问题,请参考以下文章