RecvDataObject *recv_obj = new RecvDataObject;
QThread* backgroundRecvThread = new QThread;
recv_obj->moveToThread(backgroundRecvThread);
connect(recv_obj, &RecvDataObject::dataRecved,
this, &TerminalStatusWidget::slotDataRecved,Qt::QueuedConnection);
backgroundRecvThread->start();
class RecvDataObject : public QObject
{
Q_OBJECT
public:
RecvDataObject();
~RecvDataObject();
signals:
void dataRecved(std::vector
list) ;public slots:
void slotRecvTask();
private:
QTimer m_RecvTask;
};
Q_DECLARE_METATYPE(RunTimeInfo)
Q_DECLARE_METATYPE(std::vector
)
class RecvDataObject : public QObject
{
Q_OBJECT
public:
RecvDataObject()
{
qRegisterMetaType
("RunTimeInfo"); qRegisterMetaType<std::vector
>("std::vector " );
m_RecvTask.setInterval(5000);
connect(&m_RecvTask, SIGNAL(timeout()), this, SLOT(slotRecvTask()));
m_RecvTask.start();
}
~RecvDataObject();
signals:
void dataRecved(std::vector
list) ;public slots:
void slotRecvTask();
private:
QTimer m_RecvTask;
};
qRegisterMetaType
("RunTimeInfo"); qRegisterMetaType<std::vector
>("std::vector " );这样信号槽函数才能正确工作,通过信号槽机制跨线程的数据传递完成了,完美运行。 references: https://stackoverflow.com/questions/638251/how-to-emit-cross-thread-signal-in-qt http://www.qtcentre.org/threads/54409-signal-slot-with-std-string-How https://stackoverflow.com/questions/14083599/signals-and-slots-passing-data Qt5中运行后台网络读取线程与主UI线程互交 - foo__hack - 博客园 (cnblogs.com)
原文始发于微信公众号(汇编语言):Qt5中运行后台网络读取线程与主UI线程互交
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论