Qt中使用Sleep的问题

翰墨流轩 2019-09-23 02:32:15

代码如图,实际执行执行时会忽略
ui->send->setText("发送中...");
这一句,直接睡眠3秒然后显示发送成功。
这是为什么?
...全文
603 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-09-25
  • 打赏
  • 举报
回复
引用 5 楼 翰墨流轩 的回复:
[quote=引用 3 楼 赵4老师 的回复:] QApplication::processEvents();
感谢尼古拉斯赵四老师,测试过了有用[/quote] 其实我也是瞎蒙蒙对了。
翰墨流轩 2019-09-25
  • 打赏
  • 举报
回复
引用 3 楼 赵4老师 的回复:
QApplication::processEvents();
感谢尼古拉斯赵四老师,测试过了有用
翰墨流轩 2019-09-25
  • 打赏
  • 举报
回复
引用 1 楼 这是一个正经昵称 的回复:
一个线程,你阻塞在那里后面的就没法执行。 你可以把Qt理解为: while(1){ slot(); update(); } 阻塞在slot那里,没办法update。 你这种情况应该改成: setText("1"); QTimer *t = new QTimer(); t->start(3); connect(t,SIGNAL(timeout()),ui->send,SLOT(yourSlot())); 然后在yourslot里setText
应该是这这样吧 connect(t,SIGNAL(timeout()),this,SLOT(yourSlot()));
  • 打赏
  • 举报
回复
我当初也被坑过。 另外一种方法可能是加 qapp->postevents(); 但是窗体信号循环依旧还是阻塞在了slot里,我感觉不适用。 用Qt做界面,要注意把界面和处理分开,带while(1) Sleep等耗时的东西,统统新开个线程放进去。 还可以通过信号在线程里把实时更新的数据发出来更新界面。 另外信号也不要频率太高,测试过,一样阻塞界面
  • 打赏
  • 举报
回复
一个线程,你阻塞在那里后面的就没法执行。 你可以把Qt理解为: while(1){ slot(); update(); } 阻塞在slot那里,没办法update。 你这种情况应该改成: setText("1"); QTimer *t = new QTimer(); t->start(3); connect(t,SIGNAL(timeout()),ui->send,SLOT(yourSlot())); 然后在yourslot里setText
赵4老师 2019-09-24
  • 打赏
  • 举报
回复
QApplication::processEvents();

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧