Qt 按QML代码打开/显示和关闭/隐藏弹出窗口 >我注册的C++类中有 qy属性: /C++类 Q_属性(bool inProgress READ inProgress WRITE setInProgress NOTIFY inProgress CHANGED)

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

。。。基于此,我打算显示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()
            }
        }
    }
}

<>我是什么?< /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();

Remove
visible:false
,它不会打开弹出窗口,但会阻止弹出窗口在opening@Amfasis但是我改变了信号插槽连接内部的可见性,所以这不应该是一个问题。对吧?没错,但我想说,值得一试,把所有对可见的引用都注释掉。还有,你的弹出窗口里有什么东西吗?示例为空,但这可能正是我要检查的示例(设置要尝试的宽度和高度),以确保
inProgressChanged
实际触发。然后,一个最小的可复制示例可能会有所帮助。