QT进度对话框取消按钮未突出显示

时间:2010-08-16 14:58:44

标签: qt progressdialog

我有一个使用20个不同类的应用程序。程序执行在mainwindow中开始。我启动了一个进度对话框。我会针对不同的目的使用不同的类。在执行到特定类的每个函数调用之后执行所需并返回到主窗口类之后,我将更新进度对话框。现在,问题是当执行离开主窗口类时,进度对话框会冻结。取消按钮无法访问,因此无法在所需时间停止执行。

mainclass :: mainclass() {

ProgressDialog-> EXEC();

x->add();

updateProgressDialog();

y->do();

updateProgressDialog();

zz->bring();

updateProgressDialog();

}

// x,y,z是三个不同的类。

这就是执行的方式。一旦我在主类中输入函数,我将启动进度对话框。并从不同的类调用函数。这些功能需要相当长的时间。我已经调用了一个线程来执行执行部分,但我无法取消进度diaolog。我希望程序执行在proggress对话框上按下取消按钮时停止。

请让我知道如何解决这个问题。希望我在这里很清楚。

2 个答案:

答案 0 :(得分:1)

如果不确切知道您的线程中正在执行哪些计算,则难以隔离问题。也许这可以提供帮助:Keeping the GUI Responsive

  

摘录自:执行长时间操作(由:Witold Wysota)
  在长时间计算期间(无论信号和插槽的使用情况如何),所有事件处理都会停止。因此,GUI不会刷新,不会处理用户输入,网络活动会停止,计时器也不会触发 - 应用程序看起来像是冻结的,事实上,它与时间密集型任务无关的部分是冻结。

答案 1 :(得分:0)

您正在调用的函数不处理Qt事件循环。您正在使用模态进度条,因为您正在调用exec()。这意味着Qt仅在您更新对话框时获得控制权。

我知道解决这个问题的唯一方法是将对话框编码为无模式,但您还必须提供事件循环处理的机会。

Qt文档中详细解释了这一点:QProgressDialog