我正在构建一个Qt Quick QML应用程序,一个按钮启动一个需要一段时间才能运行的进程。我想让用户知道程序实际上在做什么,但是如果我这样做的话:
Button {
text: "Click me"
onClicked: {
text = "Loading..."
backend.longRunningFunction()
text = "Click me"
}
}
单击按钮时,GUI会在backend.longRunningFunction()
运行时冻结,然后恢复正常。但是文本永远不会改变;它总是写着“点击我”。
我是否有办法强制用户界面在onClicked
功能中进行更新,例如qApp.processEvents()
?
答案 0 :(得分:0)
您可以通过调用在 C++ 中强制更新 GUI
QCoreApplication::processEvents();
longRunningFunction 中的第一件事。
你可以通过在同一个类中创建一个 c++ 函数来使它更通用
void Backend::updateUI()
{
QCoreApplication::processEvents();
}
并从您的 onClicked 调用它
onClicked: {
button1.text = "Loading..."
backend.updateUI()
backend.longRunningFunction()
button1.text = "Click me"
}
QT 推荐的方法是生成 longRunningFunction 的实际长时间运行部分的 QThread,并从该线程发送完成信号以更新 button1.text。
答案 1 :(得分:-1)
尝试这样的事情:
Button {
id: button1
text: "Click me"
onClicked: {
button1.text = "Loading..."
backend.longRunningFunction()
button1.text = "Click me"
}}