QT对QLabel中的setText使用的疑问。

我先列一段代码:for(inti=0;i<20;i++){inttmp;doubleres;read(fd,&tmp,sizeof(tmp));res=double(tm... 我先列一段代码:
for(int i=0;i<20;i++)
{
int tmp;
double res;
read(fd,&tmp,sizeof(tmp));
res = double(tmp/10);
string = QString("%1 'C").arg(res);
lcdnumber->display(double(res));
label->setText(string);
sleep(1);
}
其中read(fd,&tmp,sizeof(tmp));是读取18b20采集回来的数据,其中就有一个问题:
在那20次的循环中,label->setText(string);是每次都执行吗?怎么我在arm上运行时,只有采集到最后一次时才会显示出来?
展开
 我来答
elesteel
推荐于2017-11-24 · TA获得超过241个赞
知道答主
回答量:89
采纳率:100%
帮助的人:0
展开全部
因为setText()不会立即调用paintEvent进行绘图。程序会等你退出循环后才有机会进行绘图。所以你看到的是最后一次读回来的值。
解决的办法是:
label->setText()后,调用label->repaint()立即重绘。
或者
既然你在循环里每次都要sleep(1),为什么不加一个Timer,然后在Timer超时的时候去做这些事?这比在for循环里sleep要好很多。因为在for循环里sleep,程序一直block在你这个for循环里出不来,响应不了其他事件。不太好。
miouwawa
2011-04-12
知道答主
回答量:20
采纳率:0%
帮助的人:15.5万
展开全部
肯定是每次都运行啊,你的循环里又没分支跳转语句控制这里的执行流。
之所以不显示之前的,猜测原因可能如下:
1. 每次采集的数值都一样。。。
2. 采集速度过快,界面来不及刷新
最简单的方式就是设断点调试看下,如果确实20次中有不同的res值,很可能就是刷新过快的缘故了
sleep同样会阻塞主线程的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式