使用Qt创建程序时,我们可以进行长时间的递归过程,
如果是这样,过了一会儿,windows会在窗口标题旁边显示“不回答”消息。
此消息可能会导致用户认为程序不起作用,这是不正确的。
如何在Qt中避免此消息?
答案 0 :(得分:7)
为了保持对系统和用户输入的响应,将长时间运行的任务放入其自己的线程中。您可能还想向用户提供反馈,例如进度条,因此他看到该程序仍在执行他要求的工作。
另请参阅Threading Basics以获取有关在Qt和Threading and Concurrent Programming Examples中使用线程的介绍。
答案 1 :(得分:3)
如果你的进程由于循环(或递归函数)需要很长时间,你可以在循环中调用QCoreApplication :: processEvents()来请求你的应用程序处理事件。
如果只有一条指令需要很长时间(例如复制大文件),则可以使用QThread或QtConcurrent。
答案 2 :(得分:2)
虽然奥拉夫的答案很好,但更简单的方法是在代码中加上QCoreApplication::processEvents()。
来自文档:
根据以下内容处理调用线程的所有挂起事件 指定的标志,直到没有其他事件要处理。您可以 当程序忙于执行a时,偶尔会调用此函数 长时间操作(例如复制文件)。