異步消息postEvent更新界面


其實就是和Qt::QueuedConnection時的信號槽一樣,屬於異步的。

1、新建QEvent子類

①、頭文件

#ifndef MYEVENT_H

#define MYEVENT_H

#include <QString>

#include <QEvent>

class MyEvent : public QEvent

{

QString m_data;

public:

const static Type TYPE = static_cast<Type>(QEvent::User + 0xFF);

MyEvent(QString data = "");

QString data();

};

#endif // MYEVENT_H

②、cpp

#include "myevent.h"

MyEvent::MyEvent(QString data) : QEvent(TYPE)

{

m_data = data;

}

QString MyEvent::data()

{

return m_data;

}

2、在任何需要發送消息的地方

QApplication::postEvent(parent(), new MyEvent("Begin"));//必須在堆上建空間

for(int i=0; i<10000; i++)

{

QApplication::postEvent(parent(), new MyEvent(QString::number(i)));

msleep(1);

}

QApplication::postEvent(parent(), new MyEvent("End"));

3、在主界面中處理消息

bool MainWindow::event(QEvent *evt)

{

bool ret = true;

if( evt->type() == MyEvent::TYPE )

{

MyEvent* se = dynamic_cast<MyEvent*>(evt);

if( se != NULL )

{

ui->plainTextEdit->appendPlainText(se->data());

}

}

else

{

ret = QWidget::event(evt);

}

return ret;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM