qt - 通过 QML 代码打开/显示和关闭/隐藏弹出窗口
问题描述
Q_PROPERTY
在我注册的 C++ 类中有一个:
// 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
}
但是pop没有出现。当然,如果总是显示对弹出窗口的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()
}
}
}
}
我错过了什么?
解决方案
该代码通过触发远离 CPU 阻塞操作的 C++ 信号来工作:
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();
推荐阅读
- excel - sumproduct 包含 excel 中的其他函数
- php - 是否可以从“EUR”或“GBP”等货币代码动态转换货币符号?
- git - Intelij IDEA ssh-key git 存储库连接被拒绝
- python - 在 Keras LSTM 中添加双向会导致 RuntimeError('您必须在使用之前编译模型。')
- c++ - boost xml parsingl 将 xml 的路径作为变量发送
- postgresql - 如果不为空,则从表中获取值的函数,否则生成新值
- html - '@media' 不会影响我的 Jumbotron 标头
- bootstrap-4 - Bootstrap 4 Safari 图像和文本重叠
- arrays - Angular - 将数组存储到表单数组中
- delphi - 除了全局原子表中的条目之外,“GlobalAddAtom”还需要哪些全局资源?