日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Qt线程间通信-自定义事件

發布時間:2025/3/15 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt线程间通信-自定义事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
線程間通信:
1.自定義事件:postEvent();
2.信號與槽【本質也是通過自定義事件實現的】
注意:每個線程都有自己的事件循環



自定義事件:
1.從QEvent繼承;
2.registerEventType();//會返回全局唯一的事件類型
3.QCoreApplication::postEvent();//異步方式發送事件,Qt本身接管事件周期,在事件處理后就會銷毀他,所以new了后不要delete!!!!注意了new了后可以不delete!!!
4.重寫event方法;//接收的那一方重寫event




線程間通信:
1.使用自定義事件在線程通信;
2.可攜帶自定義數據;

3.邏輯清晰不易混亂;


程序運行截圖如下:



代碼如下:

customevent.h

#ifndef CUSTOMEVENT_H #define CUSTOMEVENT_H#include <QEvent> #include <QString>class CustomEvent:public QEvent { public:CustomEvent(const QString &msg);static QEvent::Type evType();static QEvent::Type m_eventType;QString m_msg; };#endif // CUSTOMEVENT_H


widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include "customevent.h" #include <QLabel>class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();bool event(QEvent *e);protected:QLabel *m_label; };#endif // WIDGET_H


customevent.cpp

#include "customevent.h"QEvent::Type CustomEvent::m_eventType=(QEvent::Type)registerEventType();CustomEvent::CustomEvent(const QString &msg):QEvent(evType()),m_msg(msg) {}QEvent::Type CustomEvent::evType(){return m_eventType; }


main.cpp

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }


widget.cpp

#include "widget.h" #include <QEvent> #include <QTimer> #include <QDateTime> #include <QCoreApplication> #include <QThread>class SimpleThread:public QThread{ public:SimpleThread(QObject *receiver):m_receiver(receiver){}void run(){while(1){QThread::msleep(1000);CustomEvent *ce=new CustomEvent(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));QCoreApplication::postEvent(m_receiver,ce);}}QObject *m_receiver; };Widget::Widget(QWidget *parent): QWidget(parent) {m_label=new QLabel(this);SimpleThread *t=new SimpleThread(this);t->start(); }Widget::~Widget() {}bool Widget::event(QEvent *e) {if(e->type()==CustomEvent::evType()){CustomEvent *ce=(CustomEvent*)e;m_label->setText(ce->m_msg);m_label->adjustSize();e->accept();return true;}return QWidget::event(e); }

總結

以上是生活随笔為你收集整理的Qt线程间通信-自定义事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。