2013-02-27 43 views
1

制作时使用Qt的程序,我们可以有很长递归过程,如何避免窗口“不回答”的消息上的程序

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

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

我该如何避免Qt中的这条消息?

回答

7

为了保持对系统和用户输入的响应,将长时间运行的任务放入其自己的线程中。您可能还想向用户提供反馈,例如进度条,因此他认为该计划仍在执行他所要求的一些工作。

另请参阅Threading Basics以获取有关使用Qt的线程和Threading and Concurrent Programming Examples的一些示例的介绍。

+0

感谢您的回答,我使用了QtConcurrent :: run(),这对我想要的是完美的。 – BlueMagma 2013-02-27 10:02:54

3

如果由于循环(或递归函数)而导致进程花费很长时间,则可以在循环中调用QCoreApplication :: processEvents()以请求应用程序处理事件。

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

2

尽管Olaf的回答很好,但更简单的方法是在代码中撒上QCoreApplication::processEvents()

从文档:

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