【发布时间】:2019-11-04 11:26:22
【问题描述】:
我有一个 Qt 快速窗口:
Window{
id: mainWindow
...
}
我想在 QML 中的长阻塞操作之前显示一个消息框:
// Set visible=true of 'messageBox' Rectangle{}
messageBox.showWaitMessage("Please wait")
// I want to show it before blocked the screen
mainWindow.requestUpdate()
// Long blocking operation:
compressFile("filepath")
屏幕中的所有对象都是mainWindow的子对象。
但它不起作用。在阻塞操作之前它仍然不重绘屏幕。
为什么?
【问题讨论】:
-
可能你的
compressFile阻塞了GUI线程。您应该在单独的线程中运行长时间操作。 -
我知道它会阻塞。这就是为什么我想在屏幕阻塞之前刷新屏幕:)
-
不,您请求更新,而不是真正更新 GUI。
-
是的,这就是为什么它不起作用+1,我认为它是(requestUpdate)强制屏幕立即更新。
-
反正GUI编程要求主线程不会被用户阻塞。此外,您还有在单独的线程中运行任务的工具——QML 中的 WorkerScript 或 C++ 中的 QThread。