Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-09-15 13:21:53 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-09-16 10:30:36 +0200
commitcf32b66adbfb489cd6e5d5c0bf3f741b59ba204c (patch)
tree44be69c9487f5d4db1092d061a555bd6001c1ab4 /examples/qml/usingmodel
parentb20d6f6906f91f9df608d7800f4e27f7a7160abe (diff)
Move examples around
Change the directory structure to closer match that of Qt. Task-number: PYSIDE-841 Change-Id: I87aca346b6654aafe94dd1fb83c184c182ceb2e6 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'examples/qml/usingmodel')
-rw-r--r--examples/qml/usingmodel/doc/usingmodel.pngbin0 -> 2791 bytes
-rw-r--r--examples/qml/usingmodel/doc/usingmodel.rst9
-rw-r--r--examples/qml/usingmodel/usingmodel.py70
-rw-r--r--examples/qml/usingmodel/usingmodel.pyproject3
-rw-r--r--examples/qml/usingmodel/view.qml29
5 files changed, 111 insertions, 0 deletions
diff --git a/examples/qml/usingmodel/doc/usingmodel.png b/examples/qml/usingmodel/doc/usingmodel.png
new file mode 100644
index 000000000..b4240951b
--- /dev/null
+++ b/examples/qml/usingmodel/doc/usingmodel.png
Binary files differ
diff --git a/examples/qml/usingmodel/doc/usingmodel.rst b/examples/qml/usingmodel/doc/usingmodel.rst
new file mode 100644
index 000000000..11b476d09
--- /dev/null
+++ b/examples/qml/usingmodel/doc/usingmodel.rst
@@ -0,0 +1,9 @@
+Using Model Example
+===================
+
+A Python application that demonstrates how to use a :ref:`QAbstractListModel`
+with QML.
+
+.. image:: usingmodel.png
+ :width: 400
+ :alt: Using Model Screenshot
diff --git a/examples/qml/usingmodel/usingmodel.py b/examples/qml/usingmodel/usingmodel.py
new file mode 100644
index 000000000..6f8ea5a21
--- /dev/null
+++ b/examples/qml/usingmodel/usingmodel.py
@@ -0,0 +1,70 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import os
+from pathlib import Path
+import sys
+from PySide6.QtCore import QAbstractListModel, Qt, QUrl, QByteArray
+from PySide6.QtGui import QGuiApplication
+from PySide6.QtQuick import QQuickView
+from PySide6.QtQml import qmlRegisterSingletonType
+
+
+class PersonModel (QAbstractListModel):
+ MyRole = Qt.UserRole + 1
+
+ def __init__(self, parent=None):
+ QAbstractListModel.__init__(self, parent)
+ self._data = []
+
+ def roleNames(self):
+ roles = {
+ PersonModel.MyRole: QByteArray(b'modelData'),
+ Qt.DisplayRole: QByteArray(b'display')
+ }
+ return roles
+
+ def rowCount(self, index):
+ return len(self._data)
+
+ def data(self, index, role):
+ d = self._data[index.row()]
+
+ if role == Qt.DisplayRole:
+ return d['name']
+ elif role == Qt.DecorationRole:
+ return Qt.black
+ elif role == PersonModel.MyRole:
+ return d['myrole']
+ return None
+
+ def populate(self, data=None):
+ for item in data:
+ self._data.append(item)
+
+
+def model_callback(engine):
+ my_model = PersonModel()
+ data = [{'name': 'Qt', 'myrole': 'role1'},
+ {'name': 'PySide', 'myrole': 'role2'}]
+ my_model.populate(data)
+ return my_model
+
+
+if __name__ == '__main__':
+ app = QGuiApplication(sys.argv)
+ view = QQuickView()
+ view.setResizeMode(QQuickView.SizeRootObjectToView)
+
+ qmlRegisterSingletonType(PersonModel, "PersonModel", 1, 0, "MyModel", model_callback)
+ qml_file = os.fspath(Path(__file__).resolve().parent / 'view.qml')
+ view.setSource(QUrl.fromLocalFile(qml_file))
+ if view.status() == QQuickView.Error:
+ sys.exit(-1)
+ view.show()
+
+ r = app.exec()
+ # Deleting the view before it goes out of scope is required to make sure all child QML instances
+ # are destroyed in the correct order.
+ del view
+ sys.exit(r)
diff --git a/examples/qml/usingmodel/usingmodel.pyproject b/examples/qml/usingmodel/usingmodel.pyproject
new file mode 100644
index 000000000..600cdb409
--- /dev/null
+++ b/examples/qml/usingmodel/usingmodel.pyproject
@@ -0,0 +1,3 @@
+{
+ "files": ["view.qml", "usingmodel.py"]
+}
diff --git a/examples/qml/usingmodel/view.qml b/examples/qml/usingmodel/view.qml
new file mode 100644
index 000000000..c5aa7e0fc
--- /dev/null
+++ b/examples/qml/usingmodel/view.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import PersonModel
+
+ListView {
+ width: 100
+ height: 100
+ anchors.fill: parent
+ model: MyModel
+ delegate: Component {
+ Rectangle {
+ height: 25
+ width: 100
+ Text {
+ function displayText() {
+ var result = ""
+ if (typeof display !== "undefined")
+ result = display + ": "
+ result += modelData
+ return result
+ }
+
+ text: displayText()
+ }
+ }
+ }
+}