• 2033阅读
  • 8回复

GUI语句执行顺序的问题 [复制链接]

上一主题 下一主题
离线wslwushili
 

只看楼主 倒序阅读 楼主  发表于: 2019-02-09

a()
{
   ui->label->setText("start");
   循环10000次;
   ui->label->setText("end");
}
我以为当运行函数a()时,label会显示start,然后过一段时间再显示end。但结果是没显示start,而是直接显示end。求解惑,谢谢!
离线gspite

只看该作者 1楼 发表于: 2019-02-11
可考虑实验定时器去延时
离线sharkoasis

只看该作者 2楼 发表于: 2019-02-11
循环会卡死gui的,如果要达到你想要的效果,可以在循环前增加prcessEvents
1条评分金钱+10
wslwushili 金钱 +10 - 2019-02-17
离线dbzhang800

只看该作者 3楼 发表于: 2019-02-11
QWidget的界面绘制是通过让事件循环调用 paintEvent() 实现的

你这几行代码中间,没有给事件循环运行的机会
1条评分金钱+3
wslwushili 金钱 +3 - 2019-02-17
离线yysr

只看该作者 4楼 发表于: 2019-02-11
有两个问题,1. 设置什么值并不意味着立马就显示什么值,等你执行完这段代码才会进行显示,所以实际看到的是最后设置的“end”。2.10000次循环会瞬间完成的,跟没有这个循环没差别。
1条评分金钱+5
wslwushili 金钱 +5 - 2019-02-17
离线彩阳

只看该作者 5楼 发表于: 2019-02-13
回 yysr 的帖子
yysr:有两个问题,1. 设置什么值并不意味着立马就显示什么值,等你执行完这段代码才会进行显示,所以实际看到的是最后设置的“end”。2.10000次循环会瞬间完成的,跟没有这个循环没差别。 (2019-02-11 21:21) 

因为有一个paintEvent,当设置值的时候,还没有执行到paintEvent函数中,所以无效、
1条评分金钱+3
wslwushili 金钱 +3 - 2019-02-17
上海Qt开发联盟,热忱地欢迎你的加入!
离线stlcours

只看该作者 6楼 发表于: 2019-02-13
你可以去了解一下,WM_PAINT消息的执行时机,实际上这个消息是Windows GUI的精华所在,没有之一。你可能需要专门花几个星期去研究,但也是值得的。
1条评分金钱+5
wslwushili 金钱 +5 - 2019-02-17
离线fearlazy

只看该作者 7楼 发表于: 2019-02-14
执行ui->label->setText("start")时还没有绘制到界面。
1条评分金钱+3
wslwushili 金钱 +3 - 2019-02-17
个人博客: www.fearlazy.com 

学习使我快乐!
离线wslwushili

只看该作者 8楼 发表于: 2019-02-17
谢谢大家的解释!我目前使用在循环前面加 processEvent方法,可以实现我要的效果。
快速回复
限100 字节
 
上一个 下一个