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线程互交
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论