我注册的C ++类中有一个Q_PROPERTY
:
// C++ Class
Q_PROPERTY(bool inProgress READ inProgress WRITE setInProgress NOTIFY inProgressChanged)
...基于此,我打算显示QML弹出窗口:
Popup {
id: popup
visible: cppClass.inProgress // Bind visibility to C++ Q_PROPERTY
}
但是没有弹出。如果将visible
更改为true
,则总是会显示弹出窗口。
试图使用信号/插槽连接来打开/显示弹出窗口,但不起作用:
Popup {
id: popup
visible: false
Connections {
target: cppClass
onInProgressChanged: {
if (cppClass.inProgress) {
console.log("open ...") // This text is logged correctly
popup.visible = Qt.binding(function(){return true}) // popup is NOT shown
popup.open() // popup is NOT opened
} else {
console.log("close ...")
popup.visible = Qt.binding(function(){return false})
popup.close()
}
}
}
}
我想念什么?
答案 0 :(得分:0)
通过触发C ++信号而不是CPU阻塞操作来工作的代码:
Popup {
visible: cppClass.inProgress
}
QCoreApplication::processEvents();
cppClass->setInProgress(true);
QCoreApplication::processEvents();
// Dot not trigger signal immediately before heavy duty logic
//
// Do some less heavy statements
// before CPU-blocking operation
// to make sure QML UI engine receives signals
// and has time to show the GUI changes
// CPU-blocking operation
heavyDutyLogic.run();
QCoreApplication::processEvents();
cppClass->setInProgress(false);
QCoreApplication::processEvents();