moveToThread to qml
-
I expected to get the text "1" from the thread to the UI.
My code is the following using moveToThread.
However I get nothing. What did I miss?//tcpmodel.cc #include "tcpmodel.h" #include <QObject> TcpModel::TcpModel(QObject* parent) { } void TcpModel::tcpWork() { while(1) { msg="1"; emit dataRecved(msg); } } void TcpModel::tcpClose() { m_socket->close(); delete m_socket; } TcpMoveToThread::TcpMoveToThread(QObject* parent) { m_tcp.moveToThread(&m_thread); connect(&m_thread,&QThread::started,&m_tcp,&TcpModel::tcpWork); / connect(&m_tcp,&TcpModel::dataRecved,this,&TcpMoveToThread::dataChangedSlot); connect(&m_thread,&QThread::finished,&m_tcp,&TcpModel::tcpClose); / m_thread.start(); } TcpMoveToThread::~TcpMoveToThread() { m_thread.exit(); m_thread.wait(); } void TcpMoveToThread::dataChangedSlot(QString msg) { m_data=msg; emit dataChanged(); }
//tcpmodel.h #ifndef TCPMODEL_H #define TCPMODEL_H #include <QTcpSocket> #include <QThread> class TcpModel:public QObject //实现TCP功能的类 { Q_OBJECT public: TcpModel(QObject* parent=nullptr); signals: void dataRecved(QString data); public slots: void tcpWork(); void tcpClose(); private: QTcpSocket* m_socket; QString msg; }; class TcpMoveToThread: public QObject { Q_OBJECT Q_PROPERTY(QString m_data MEMBER m_data) public: TcpMoveToThread(QObject* parent=nullptr); ~TcpMoveToThread(); signals: void dataChanged(); public slots: void dataChangedSlot(QString msg); private: QThread m_thread; TcpModel m_tcp; QString m_data; }; #endif // TCPMODEL_H
//gpsindiactor.qml QGCLabel { id: gpsText text: qsTr("text") color: qgcPal.text anchors.verticalCenter: gpsIcon.verticalCenter anchors.left: gpsIcon.right anchors.leftMargin: ScreenTools.defaultFontPixelWidth } Connections{ target: tcp onDataChanged:{ gpsText.text=tcp.m_data; } } TcpMoveToThread{ id: tcp }