1

使用 Qt 编写程序时,我们可以有很长的递归过程,

如果是这样,一段时间后,窗口会在窗口标题旁边显示“不回答”消息。

此消息可能会导致用户认为程序不工作,这是不正确的。

如何避免在 Qt 中出现此消息?

4

3 回答 3

7

为了保持对系统和用户输入的响应,将长时间运行的任务放入它自己的线程中。您可能还想向用户提供反馈,例如进度条,以便他看到程序仍在执行他要求的某些工作。

有关在 Qt 中使用线程的介绍,另请参阅线程基础知识和一些示例的线程和并发编程示例。

于 2013-02-27T09:39:29.800 回答
3

如果您的流程由于循环(或递归函数)而需要很长时间,您可以在循环中调用 QCoreApplication::processEvents() 来要求您的应用程序处理事件。

如果你只有一条指令需要很长时间(比如复制一个大文件),你可以使用 QThread 或 QtConcurrent。

于 2013-02-27T09:46:27.350 回答
2

虽然奥拉夫的回答很好,但更简单的方法是在代码中添加QCoreApplication::processEvents()

从文档:

根据指定的标志处理调用线程的所有挂起事件,直到没有更多事件要处理。当您的程序忙于执行长时间操作(例如复制文件)时,您可以偶尔调用此函数。

于 2013-02-27T09:47:21.707 回答