Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. moveToThread to qml
Forum Updated to NodeBB v4.3 + New Features

moveToThread to qml

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
1 Posts 1 Posters 95 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    Jleon
    wrote on last edited by
    #1

    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
         }
    
    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved