在插槽运行期间刷新/更新 GUI
Posted
技术标签:
【中文标题】在插槽运行期间刷新/更新 GUI【英文标题】:refresh/update GUI during slot running 【发布时间】:2012-12-28 23:57:14 【问题描述】:GUI 元素的所有属性(文本、项目 ...)在插槽完成运行后都会更新,并且我有一个显示应用程序状态的小标签(即“正在刷新 ...”、“正在配置 . ..”、“正在扫描...”、“完成”等)在触发的插槽运行期间。
如何在触发槽后立即将标签的文本设置为“正在刷新...”之类的内容,并且在槽快完成时将标签的文本更改为“完成”之类的内容?
目前我正在通过发布来做到这一点
ui->Status->setText("Refreshing ...");
...
ui->Status->setText("Done");
在插槽内,但只有在插槽完成后才能看到更改,所以我永远看不到“正在刷新...”。
很抱歉,这很容易,但我是 OOP 的新手,我一直在按顺序思考。
【问题讨论】:
Forcing the Qt GUI to update before entering a separate function 的可能重复项 Hmm .. 确实是重复的,但是给定的解决方案(repaint() 或 processEvents() )都不起作用。在插槽运行期间,标签的文本仍然没有变化。 哇.. 最初我尝试调用建议的 ui->Status->repaint();就在使用 QProcces 启动程序之前,该程序将应用程序置于睡眠模式,直到程序终止,但没有工作。我意识到重绘没有足够的时间来重绘,所以我尝试了 repaint(),休眠一秒钟,然后创建 QProcces,但这也不起作用。然后我生气了,在创建 QProcces 之前调用了 10 次 repaint() .. 瞧:D 【参考方案1】:这就是我当时最终做的事情。 “qApp->processEvents();”是关键。 Repaint() 是不够的。
void Widget::SetStatus(QString status)
ui->Status->setText(status);
ui->Status->repaint();
qApp->processEvents();
【讨论】:
以上是关于在插槽运行期间刷新/更新 GUI的主要内容,如果未能解决你的问题,请参考以下文章