这是我在这里发表的第一篇文章,我会尽力解释我的问题,不要犹豫,因为我是初学者而纠正我。
我正在使用Qt设计GUI来控制3D引擎。 Qt和3D引擎使用QTcpserver一起通话。 我可以将命令发送到3D引擎,如“移动对象”或“在场景中列出对象”,引擎将回答。
目前,存在两个问题: 1)当服务器响应时,我不知道这是来自“移动”功能还是“列表”功能的响应。我解析了在GUI上启动事件的答案,但这不是一个合适的解决方案。 2)在发送命令之前,我调用waitForReadyRead函数,该函数阻塞主线程。 这就是我在这里发帖的原因。
我想到了一个解决方案:一个Thread,它包含一个命令列表和下一个调用函数的指针。当我点击一个UI按钮时,它会将命令发送到带有正确函数指针的列表,而Thread将尝试将列表发送命令清空到服务器。
但我真的不知道这是否是解决问题的好方法。 我对QTcpServer和QThread了解不多,我读过许多文章,它们一起用来处理多个客户端连接,但这对我没用。
我没有在这里发布代码,因为我认为我的问题不是“代码相关”,但如果你问我,我会很乐意这样做。
感谢你指出了正确的方向。
答案 0 :(得分:1)
QTcpSocket上的操作设计为异步。不要试图将它用作同步对象 - 这不是这个类的设计方式。当然,您可以创建一个单独的线程来进行处理,但只是通过套接字发送命令并不能保证线程的开销。
http://qt-project.org/doc/qt-5/qabstractsocket.html
查看发出的信号,包括来自QIODevice的readyRead()。创建一个插槽,处理您的数据并将其连接到该信号。您还应该处理其他情况,包括错误处理信号和处理连接/断开状态。