我有一个具有onClicked功能的按钮。有一个C ++类Middle,通过qmlRegisterType连接了函数search_connection。
我想做的是在C ++函数计算返回值的同时更改searchButton的文本,并同时禁用该按钮。
什么都没发生。该按钮始终以文本“搜索”启用。我相信实际发生的是,首先执行了search_connection函数,而其余所有函数发生得如此之快,以至于我无法注意到从“ Search”到“ Searching ...”的更改,然后再返回。
TextField {
id: startStop
}
TextField {
id: finishStop
}
Button {
id: searchButton
text: qsTr("Search")
onClicked: {
text = qsTr("Searching...")
enabled = false;
searchResult.text = middle.search_connection(startStop.text,finishStop.text)
enabled = true;
text = qsTr("Search")
}
}
在将文本更改为“正在搜索...”之后,有人知道如何使Qt调用该函数吗?
答案 0 :(得分:1)
您的用户界面将在下次调用事件循环时重新绘制某些区域。在您的情况下,这永远不会发生,因为直接调用插槽(您的函数)并阻塞应用程序,直到完成为止。有几种方法可以避免这种阻塞:
如果该方法需要一些时间,我将使用一个新线程。因此,您的gui不会被阻止,您的按钮仍会收到事件(绘画,鼠标等)。
编辑1:
如果您的C ++代码很简单并且可以转换为JavaScript代码,则也可以使用WorkerScript。这是QThread的QML版本。但是它有一些局限性。您只能使用JavaScript,并且不能在运行时与Worker进行交互。
感谢树叶的建议。