如何将 table-模型数据传递给 qml?

How to pass table-model data to qml?

我看到一些代码是用c++风格写的,我试着用python风格来写。
我在python文件中写了一个table模型,然后传给qml文件。
但是当我 运行 我的 main.py 文件时, windows 什么都不显示。
我的程序没有显示任何错误,我不知道这里出了什么问题? 有人可以知道原因吗?

main.py

import os
from pathlib import Path
import sys

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine

from PyQt5.QtCore import QAbstractTableModel, Qt


class TableModel(QAbstractTableModel):
    def __init__(self):
        super().__init__()

    def rowCount(self, parent):
        return 10

    def columnCount(self, parent) -> int:
        return 10

    def data(self, index, role: int):
        if index.isValid() and role == Qt.DisplayRole:
            return f"{index.row()},{index.column()}"

        return None

if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.rootContext().setContextProperty('myModel', TableModel())
    engine.load(os.fspath(Path(__file__).resolve().parent / "table.qml"))
    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())

table.qml

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
    width: 320
    height: 320
    visible: true

    TableView {
        anchors.fill: parent
        rowSpacing: 5
        columnSpacing: 5
        model: myModel
        delegate: myDele
    }

    Component {
        id: myDele
        Rectangle {
            implicitHeight: 50
            implicitWidth: 50
            width: 50
            height: 50
            color: "#abc"
            Text {
                anchors.centerIn: parent
                text: display
            }
        }
    }

}

结果

问题出在内存管理上,分配给变量比直接将对象传递给方法要好,因为应该假定对象将被使用但其内存不会被管理,除非文档指出。

在这种情况下,您必须将对象保存在一个变量中,然后再使用它:

myModel = TableModel()
engine.rootContext().setContextProperty('myModel', myModel)