Qt 按QML代码打开/显示和关闭/隐藏弹出窗口 >我注册的C++类中有 qy属性: /C++类 Q_属性(bool inProgress READ inProgress WRITE setInProgress NOTIFY inProgress CHANGED)
。。。基于此,我打算显示QML弹出窗口:Qt 按QML代码打开/显示和关闭/隐藏弹出窗口 >我注册的C++类中有 qy属性: /C++类 Q_属性(bool inProgress READ inProgress WRITE setInProgress NOTIFY inProgress CHANGED),qt,qml,Qt,Qml,。。。基于此,我打算显示QML弹出窗口: Popup { id: popup visible: cppClass.inProgress // Bind visibility to C++ Q_PROPERTY } 但是流行音乐没有出现。如果将visible更改为true,当然会始终显示弹出窗口 到目前为止已经试过了 尝试使用信号/插槽连接打开/显示弹出窗口,但不起作用: Popup { id: popup visible: false Connecti
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()
}
}
}
}
<>我是什么?< /P> < P>代码触发的C++信号更远离CPU阻塞操作:
Popup {
visible: cppClass.inProgress
}
QCoreApplication::processEvents();
cppClass->setInProgress(真);
QCoreApplication::processEvents();
//Dot不在重型逻辑之前立即触发信号
//
//做一些不那么沉重的陈述
//在CPU阻塞操作之前
//确保QML UI引擎接收信号
//并有时间显示GUI更改
//CPU阻塞操作
heavyDutyLogic.run();
QCoreApplication::processEvents();
cppClass->setInProgress(假);
QCoreApplication::processEvents();
Removevisible:false
,它不会打开弹出窗口,但会阻止弹出窗口在opening@Amfasis但是我改变了信号插槽连接内部的可见性,所以这不应该是一个问题。对吧?没错,但我想说,值得一试,把所有对可见的引用都注释掉。还有,你的弹出窗口里有什么东西吗?示例为空,但这可能正是我要检查的示例(设置要尝试的宽度和高度),以确保inProgressChanged
实际触发。然后,一个最小的可复制示例可能会有所帮助。