diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-15 13:21:53 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-09-16 10:30:36 +0200 |
commit | cf32b66adbfb489cd6e5d5c0bf3f741b59ba204c (patch) | |
tree | 44be69c9487f5d4db1092d061a555bd6001c1ab4 /examples/qml/usingmodel | |
parent | b20d6f6906f91f9df608d7800f4e27f7a7160abe (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.png | bin | 0 -> 2791 bytes | |||
-rw-r--r-- | examples/qml/usingmodel/doc/usingmodel.rst | 9 | ||||
-rw-r--r-- | examples/qml/usingmodel/usingmodel.py | 70 | ||||
-rw-r--r-- | examples/qml/usingmodel/usingmodel.pyproject | 3 | ||||
-rw-r--r-- | examples/qml/usingmodel/view.qml | 29 |
5 files changed, 111 insertions, 0 deletions
diff --git a/examples/qml/usingmodel/doc/usingmodel.png b/examples/qml/usingmodel/doc/usingmodel.png Binary files differnew file mode 100644 index 000000000..b4240951b --- /dev/null +++ b/examples/qml/usingmodel/doc/usingmodel.png 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() + } + } + } +} |