Qt中怎么实现textEdit实时更新?

我用qt写一个串口收发软件,当收到数据后显示在面板的textEdit中,但我不知道应该怎么让数据不断显示。这个显示的函数应该放到哪里?如果放到主函数中用一个while(1... 我用qt写一个串口收发软件,当收到数据后显示在面板的textEdit中,但我不知道应该怎么让数据不断显示。这个显示的函数应该放到哪里?如果放到主函数中用一个while(1)循环的话就响应不了其他的消息了。还是应该开辟一个线程给它?
图片是程序的主界面,它是一个自定义的类usartMW,继承自QMainWindow类,类里就只有一些鼠标点击的信号槽:
void on_uart_activated(int index); void on_bps_activated(int index); void on_stopBit_activated(int index); void on_uartSw_clicked(); void on_displaySw_clicked();
程序的主函数如下:
int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));//显示中文 usartMW w; w.show(); return a.exec();}
展开
 我来答
百度网友615e5cc
2013-10-31 · TA获得超过139个赞
知道小有建树答主
回答量:82
采纳率:0%
帮助的人:82.1万
展开全部
用信号槽机制。
你应该是用qt中的串口模块写的吧,这个模块在接收到新数据时可以发出消息。将这个消息和你textEdit设置text的槽连接起来就行了。
我估计串口模块已经默认开了一个新线程了吧,C#中是这样,我还没用过qt的串口模块,你看看文档。如果没有开,那自然最好放在新线程中。不过通常串口接收数据频率不会太高,你如果放在主线程中估计也不会影响界面的交互。
追问
串口的读写函数是我自己写的,如果用单线程的话应该把读写函数放到哪里呢?我把部分代码贴到问题补充里了,你看一下,主函数最后是进入了一个消息循环(a.exec())里面,我的读写函数不可能放到里面去吧?
初学Qt,很多东西还不懂,请多指教。
追答
我刚看了一下QSerialPort类,这个类模块是在Qt 5.1中引入的,如果你用的是低版本的就没这个类了,只能自己编写或者用网上的第三方类,当然我更建议后者。
第三方类库多用qextserialport,你可以参考下面这个网址:
http://lhqvip.blog.51cto.com/2211973/636193
http://blog.csdn.net/yafeilinux/article/details/4717706

另,关于QSerialPort类,我估计是因为刚刚加入的新模块,功能还不全。从QAssist看到,这个类只支持阻塞式的串口通信,也就是说没有事件循环,并不会通知你串口有数据到来了,需要你写一个死循环,在其中不断循环接收串口数据,也许根本就没数据,这就是阻塞式不好的地方。
这样说来,QSerialPort就不会自己开新线程了,与C#不同。所以你要自己开一个新线程,把那个读数据的死循环所在的函数放到这个新线程中,以免GUI线程没有响应,这个你自己看Qt多线程的用法吧。

如果是你自己写的串口通信类,我就不清楚你的程序了,你自己应该最清楚。
dflangsky
2013-10-30
知道答主
回答量:28
采纳率:0%
帮助的人:20.8万
展开全部
不断显示是什么意思呢?新接收到的数据延续插入已有数据到后面显示?
追问
对的,有没有用过串口调试助手,就是那种数据不断输出的效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式