【问题标题】:refresh/update GUI during slot running在插槽运行期间刷新/更新 GUI
【发布时间】:2012-12-28 23:57:14
【问题描述】:

GUI 元素的所有属性(文本、项目 ...)在插槽完成运行后都会更新,并且我有一个显示应用程序状态的小标签(即“正在刷新 ...”、“正在配置 . ..”、“正在扫描...”、“完成”等)在触发的插槽运行期间。

如何在触发槽后立即将标签的文本设置为“正在刷新...”之类的内容,并且在槽快完成时将标签的文本更改为“完成”之类的内容?

目前我正在通过发布来做到这一点

    ui->Status->setText("Refreshing ...");
    ...
    ui->Status->setText("Done");

在插槽内,但只有在插槽完成后才能看到更改,所以我永远看不到“正在刷新...”。

很抱歉,这很容易,但我是 OOP 的新手,我一直在按顺序思考。

【问题讨论】:

  • Hmm .. 确实是重复的,但是给定的解决方案(repaint() 或 processEvents() )都不起作用。在插槽运行期间,标签的文本仍然没有变化。
  • 哇.. 最初我尝试调用建议的 ui->Status->repaint();就在使用 QProcces 启动程序之前,该程序将应用程序置于睡眠模式,直到程序终止,但没有工作。我意识到重绘没有足够的时间来重绘,所以我尝试了 repaint(),休眠一秒钟,然后创建 QProcces,但这也不起作用。然后我生气了,在创建 QProcces 之前调用了 10 次 repaint() .. 瞧:D

标签: qt


【解决方案1】:

这就是我当时最终做的事情。 “qApp->processEvents();”是关键。 Repaint() 是不够的。

void Widget::SetStatus(QString status)
{
   ui->Status->setText(status);
   ui->Status->repaint();
   qApp->processEvents();
}

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2012-03-24
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多