我想在PyQt5中自定义一个model,然后在qml中使用。我尝试写了一些代码,代码如下:
main.py
from PyQt5.QtCore import QAbstractListModel,Qt,QVariant,QModelIndex,QUrl,QObject
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView
from PyQt5.QtQml import qmlRegisterType,QQmlComponent,QQmlEngine
class MyModel(QAbstractListModel):
def __init__(self,data):
super().__init__()
self.hexdata = data
print('__init__')
def data(self, index, role=None):
return self.hexdata[index.row()]
def rowCount(self, parent=None):
print('rowCount')
return len(self.hexdata)
def roleNames(self):
print('roleNames')
return 'lineData'
class Main(QObject):
pass
if __name__ == '__main__':
path = 'main.qml'
app = QApplication([])
view = QQuickView()
con = Main()
mymodel = MyModel(['1','2'])
qmlRegisterType(MyModel,'MyModel',1,0,'MyModel')
context = view.rootContext()
context.setContextProperty("con",con)
view.engine().quit.connect(app.quit)
view.setSource(QUrl(path))
view.show()
app.exec()
main.qml
import QtQuick 2.4
import MyModel 1.0
Rectangle {
property MyModel mymodel
width: 400
height: 500
ListView {
anchors.fill: parent
model: mymodel
delegate: Text{text: lineData}
}
}
运行代码时,只是弹出一个空白窗口,而且输出信息中,只有“__init__",好像data
、rowCount
、roleNames
这3个函数都没有被调用,也许是我在qml中使用model的方式有错误。