2024-10-01 04:47:07 发布
网友
我应该如何在PyQt中创建QAbstractListModel并将其与qmllistview一起使用?在
您需要设置它的角色名,以便能够在QML中使用它
http://doc.qt.io/qt-4.8/qabstractitemmodel.html#setRoleNames
还没有使用PyQT,但是您可以在这里找到一个最小的工作示例:http://doc.qt.nokia.com/stable/qdeclarativemodels.html
如果检查包含class Animal {...}的示例,您将看到必须为要提供的不同字段定义角色。并且至少必须定义data()函数,返回给定索引的相应字段值。此外,您还需要您自己的自定义方法来插入和删除。希望这能帮助。。。在
class Animal {...}
如果有人在寻找答案,我做了一个小应用程序,用QAbstractListModel的子类连接到演员数据库,并根据@fgungor发布的示例在QGridView中显示缩略图
主.py:
import sys, models from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import QApplication from PyQt5.QtQuick import QQuickView if __name__ == '__main__': # Prints QML errors def handleStatusChange(status): if status == QQuickView.Error: errors = appLabel.errors() if errors: print (errors[0].description()) myApp = QApplication(sys.argv) appLabel = QQuickView() appLabel.statusChanged.connect(handleStatusChange) model = models.ActorModel(DB_PATH) ctxt = appLabel.rootContext() ctxt.setContextProperty('myModel', model) appLabel.setSource(QUrl('./qml/main/main.qml')) try: sys.exit(myApp.exec_()) except: print("Exiting")
模型.py:
数据库:
import sqlite3 class Database: def __init__(self, db_path): self.db_path = db_path self.sqlite_db = sqlite3.connect(self.db_path) self.sqlite_db.row_factory = sqlite3.Row self.cursor = self.sqlite_db.cursor() def actor_search(self, actor_name): self.cursor.execute('SELECT Actors.Id,Actors.Name,Actors.thumbnail AS thumbnail FROM Actors ' 'WHERE Actors.Name LIKE \'%{}%\' ORDER BY Actors.Name'.format(actor_name)) return self.cursor.fetchall()
主.qml:
import QtQuick 2.8 import QtQuick.Window 2.2 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.1 Window { id: root visible: true title: 'Actor Exploer' width: 1280 height: 720 ColumnLayout { id: mainLayout anchors.fill: parent Row { Layout.fillWidth: true TextArea { id: searchBar placeholderText: "Input actor name" Layout.fillWidth: true width: 600 onTextChanged: myModel.search_input(searchBar.text) } } GridView { id: gridView keyNavigationWraps: true Layout.fillWidth: true Layout.fillHeight: true cellWidth: 220 cellHeight: 320 model: myModel // QML connection to python model delegate: Rectangle { id: thumb_frame height: 330 width: 200 Image { id: actorThumb asynchronous: true source: "file:///" + thumb // Access to the ThumbRole in ActorModel in our python code smooth: true sourceSize.width: 200 sourceSize.height: 300 height: 300 width: 200 anchors.left: thumb_frame.left anchors.top: thumb_frame.top onStatusChanged: { if (actorThumb.status == Image.Error) actorThumb.source = 'PLACEHOLDER_IMAGE_PATH' } } Text { anchors.top: actorThumb.bottom anchors.horizontalCenter: actorThumb.horizontalCenter text: name // Access to the NameRole in ActorModel in our python code } } } }
您需要设置它的角色名,以便能够在QML中使用它
http://doc.qt.io/qt-4.8/qabstractitemmodel.html#setRoleNames
还没有使用PyQT,但是您可以在这里找到一个最小的工作示例:http://doc.qt.nokia.com/stable/qdeclarativemodels.html
如果检查包含
class Animal {...}
的示例,您将看到必须为要提供的不同字段定义角色。并且至少必须定义data()函数,返回给定索引的相应字段值。此外,您还需要您自己的自定义方法来插入和删除。希望这能帮助。。。在如果有人在寻找答案,我做了一个小应用程序,用QAbstractListModel的子类连接到演员数据库,并根据@fgungor发布的示例在QGridView中显示缩略图
主.py:
模型.py:
^{2}$数据库:
主.qml:
相关问题 更多 >
编程相关推荐