无法将QAbstractListModel传递给QML

2024-10-02 18:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用PyQt5尽可能接近地跟踪this PySide tutorial。当我运行我的代码时,我得到这个错误:ReferenceError: pythonListModel is not defined,列表显示为黑色,没有任何项目。在

这是我的密码

def main():
    platform = Platform("Windows")
    platform_wrp = qml_platforms.PlatformsWrapper(platform)
    platform_model = qml_platforms.PlatformsListModel([platform_wrp])
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine(QUrl("main.qml"))
    context = engine.rootContext()
    context.setContextProperty('pythonListModel', platform_model)
    window = engine.rootObjects()[0]
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我的模型和包装

^{pr2}$

我的QML

import QtQuick 2.1
import QtQuick.Controls 1.1

ApplicationWindow{
ListView {
    id: pythonList
    width: 400
    height: 200

    model: pythonListModel

    delegate: Component {
        Rectangle {
            width: pythonList.width
            height: 40
            color: ((index % 2 == 0)?"#222":"#111")
            Text {
                id: title
                elide: Text.ElideRight
                text: model.platform.full_name
                color: "white"
                font.bold: true
                anchors.leftMargin: 10
                anchors.fill: parent
                verticalAlignment: Text.AlignVCenter
            }
            MouseArea {
                anchors.fill: parent
            }
        }
    }
}
}

为什么Qt找不到我的contextProperty?在


Tags: textappmodelmainsyscontextwindowqml
1条回答
网友
1楼 · 发布于 2024-10-02 18:23:30

问题是“主.qml“在设置上下文属性之前加载。设置上下文后尝试加载文件:

def main():
    platform = Platform("Windows")
    platform_wrp = qml_platforms.PlatformsWrapper(platform)
    platform_model = qml_platforms.PlatformsListModel([platform_wrp])
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    context = engine.rootContext()
    context.setContextProperty('pythonListModel', platform_model)
    engine.load( QUrl("main.qml") ) #load after context setup
    window = engine.rootObjects()[0]
    window.show()
    sys.exit(app.exec_())

相关问题 更多 >