因為為了不卡界面 ,在創建 MainWindow前 創建了一個封裝好的QTcpsocket類(繼承了QThread,并在里面建立信號槽), 然后Start(). 連接對方服務器和發送資料沒有問題. 但是對方發送資料過來的時候 readyRead()對應的槽函式沒有觸發.... 目前只能在write()發送資料后 用while(1){waitForReadyRead(-1); read(); }卡在那里等待接收處理資料... 信號槽試過 Qt::DirectConnection 和 Qt::QueuedConnection 都不行..
請問這是錯誤的使用?
uj5u.com熱心網友回復:
你的 readyRead()對應的槽函式是在QTcpsocket類中實作吧,我的是一個執行緒里面就沒有問題uj5u.com熱心網友回復:
我描述得不太好. 是同一執行緒,
1. 封裝了 QTcpsocket的是A類, A類里面有成員QTcpSocket m_MyTcpsocket. A的建構式里面執行QObject::connect(&m_MyTcpsocket,SIGNAL(readyRead()),&m_MyTcpsocket,SLOT(MyReceiveData())); 并把connect和write封裝成一個MySendData(0函式, public slots: 添加了 void MyReceiveData();
2. B類繼承了QThread, 里面有一個成員A類指標 MyTcpsocket *p . main()代碼執行的是B *pb = new B() ; B->Start(). B::run()會初始化A里面的p = new MyTcpsocket (), 然后執行p->MySendData()。 連接和發送都沒有問題。這個時候對方服務器回傳東西,并沒有進入MyReceiveData();。。。
uj5u.com熱心網友回復:
上面寫錯了, 我描述得不太好. 是同一執行緒,
1. 封裝了 QTcpsocket的是A類, A類里面有成員QTcpSocket m_MyTcpsocket. A的建構式里面執行QObject::connect(&m_MyTcpsocket,SIGNAL(readyRead()),this,SLOT(MyReceiveData())); 并把connect和write封裝成一個MySendData(0函式, public slots: 添加了 void MyReceiveData();
2. B類繼承了QThread, 里面有一個成員A類指標 MyTcpsocket *p . main()代碼執行的是B *pb = new B() ; B->Start(). B::run()會初始化A里面的p = new MyTcpsocket (), 然后執行p->MySendData()。 連接和發送都沒有問題。這個時候對方服務器回傳東西,并沒有進入MyReceiveData();。。。
uj5u.com熱心網友回復:
你可以看看你的程式運行資訊,是否有類似這種錯誤:xxx in the different thread.或者:connect signal slot error之類的uj5u.com熱心網友回復:
剛開始一直搗鼓,最后把make之類檔案全干掉,重新編譯就可以了 . 后面就出現了類似你說的 xxxx another thread之類的問題.這個搜資料似乎是多執行緒里面用了有 Q_Object的類了?!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/123216.html
標籤:Qt
上一篇:App開發
