python-3.x 如何在PyQt5的弹出窗口中动态生成和显示QML元素?

9wbgstp7  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(109)

我目前正在开发一个包含QML的PyQt5应用程序。该应用程序从配置文件(configuration.yaml)动态生成QML代码。然后使用信号将生成的QML代码从Python发送到QML,我正在使用Qt.createQmlObject()示例化QML对象。
我遇到的挑战是,这个过程在主应用程序中无缝工作,但是当在Popup元素中尝试相同的过程时,生成的QML对象在应用程序界面上不可见。值得注意的是,在执行过程中没有抛出错误。尽管通过调试验证了QML对象已成功创建,但它们不会出现在界面上。
由于TestPopup.qml使用MainPopup.qml作为其父节点,可能会导致问题。我已经检查了addElement()函数,它工作正常。

产品代码:

  • MainPopup.qml *
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.2

Popup {
    id: mainPopup
    
    ...

}

字符串

  • TestPopup.qml *
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
import QtQuick.Controls.Material 2.2

MainPopup {
    id: testPopup
    
    function addElement(elementId, elementString) {
        Qt.createQmlObject(elementString, testPopup, elementId)
    }
    
    ...

}

  • app.py*
...

test_qml = """        
    import QtQuick 2.9
    import QtQuick.Window 2.2
    import QtQuick.Controls 2.2
    import QtQuick.Layouts 1.3    
            
    Text {
        text: "Hello World!"
        anchors.centerIn: parent
    }
"""

test_popup = window.findChild(QObject, "testPopup")
test_popup.addElement("testID", test_qml)

...

u5i3ibmn

u5i3ibmn1#

因为,我试图在testPopup中添加一个元素,它是从MainPopup扩展而来的,并且它自己是不可见的。我必须像这样将新元素添加到MainPopupcontentItem中:

...

function addElement(elementId, elementString) {
    Qt.createQmlObject(elementString, testPopup.contentItem, elementId)
}

...

字符串

相关问题