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上运行时,只有采集到最后一次时才会显示出来? 展开
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上运行时,只有采集到最后一次时才会显示出来? 展开
展开全部
因为setText()不会立即调用paintEvent进行绘图。程序会等你退出循环后才有机会进行绘图。所以你看到的是最后一次读回来的值。
解决的办法是:
label->setText()后,调用label->repaint()立即重绘。
或者
既然你在循环里每次都要sleep(1),为什么不加一个Timer,然后在Timer超时的时候去做这些事?这比在for循环里sleep要好很多。因为在for循环里sleep,程序一直block在你这个for循环里出不来,响应不了其他事件。不太好。
解决的办法是:
label->setText()后,调用label->repaint()立即重绘。
或者
既然你在循环里每次都要sleep(1),为什么不加一个Timer,然后在Timer超时的时候去做这些事?这比在for循环里sleep要好很多。因为在for循环里sleep,程序一直block在你这个for循环里出不来,响应不了其他事件。不太好。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询