我有一个Qt应用程序,它获取串行数据并显示在仪表板类型的GUI中。该计划的基本结构如下:
修改 创建SerialPort(继承自QIODevice)对象并将其readyRead信号连接到插槽。 当新数据进入时,它将通过消息处理程序解释并通过程序发送。最终,数据进入GUI层,并在其中显示给用户。
该程序在Windows 7中运行良好,但是当我在松下版本上运行它,运行Windows XP时,程序启动很好,但过了一会儿,GUI停止更新。我的意思是,当新数据进入时,gui不会重绘,直到用户点击按钮或调整大小。我想知道这种行为的可能原因是什么。我认为主线程可能会被所有串行数据所淹没,但我认为GUI无论如何都会在一个单独的线程中运行。我错了吗?有没有人对可能发生的事情有任何想法?
答案 0 :(得分:0)
如果SerialPortIO
不在自己的线程中,那么它在等待新数据时可能会阻塞。我没有使用过那个特定的Serial类,但一般来说,数据流可能应该在它自己的线程中。
您可以通过定期调用qApp->processEvents()
来强制程序更多地更新GUI,并且GUI应该更新。
另外,在代码中添加一些qDebug
语句,尤其是在您怀疑过于频繁或不够调用的函数顶部。
使用以下行,它可以很容易地跟踪多线程应用程序中发生的事情:
qDebug() << Q_FUNC_INFO;
希望有所帮助。