В чем разница между методами setData, setItemData и setIem QStandardItemModel?

джет

Я смущен , как использовать УстановитьДанный , setItemData и SetItem метод QStandardItemModel, это метод , кажется , имеет тот же эффект, я интересно знать , какой метод я должен выбрать для использования будет лучше?

class DemoD(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        table = QTableView()
        model = QStandardItemModel(4, 2)

        table.setModel(model)

        # delegate = SpinBoxDelegate()

        # table.setItemDelegate(delegate)

        for row in range(4):
            for col in range(2):
                item = QStandardItem('china')
                model.setItem(row, col, item)

                index = model.index(row, col)
                value = QVariant((row + 1)*(col + 1))
                model.setData(index, value)

                model.setItemData(index, {1: 'a', 2: 'b'})

        self.setCentralWidget(table)

        self.resize(400, 300)

app = QApplication([])
demo = DemoD()
demo.show()
app.exec()

Eyllanesc

Если вы хотите понять концепции модели Qt, вам следует прочитать следующие руководства:

Предыдущие концепции:

  • QStandarItemModel : это класс, унаследованный от QAbstractItemModel, который позволяет хранить любой тип информации, в отличие от QAbstractItemModel, который только определяет поведение.

Учитывая, что вы внимательно прочитали предыдущие ссылки, мы постараемся объяснить разницу между различными методами, которые вы указываете:

  • setData (): Каждая модель Qt наследуется от QAbstractItemModel, поэтому этот класс определяет общее поведение, в этом случае определяется, что модель setData () отвечает за изменение информации о роли, связанной с QModelIndex. Другими словами, это общий метод, который вы должны реализовать, если хотите реализовать редактируемую модель, например, QStringListModel не является редактируемой моделью, поэтому он не реализует ее, но в случае QStandardItemModel он редактируется, поэтому вы можете изменять информация о модели с помощью этого метода.

  • setItem (): QStandardItem - это концепция QStandardItemModel, которая концептуально похожа на QModelIndex. Этот элемент позволяет легко взаимодействовать с QModelIndex. Если QStandardItem не связан с моделью, он будет хранить только информацию, в момент назначения модели вся информация передается в модель, и модель информирует вас о любых изменениях, которые могут быть сделаны другими методами, такими как setData. Эквивалентом setData модели является метод setData QStandardItem, но последний не должен предоставлять QModelIndex, поскольку эта информация доступна для внутреннего пользования или может быть получена при создании модели.

Например:

it.setText("foo")
it.setTextAlignment(QtCore.Qt.AlignCenter)

эквивалентно

it.model().setData(it.index(), "foo", QtCore.Qt.DisplayRole)
it.model().setData(it.index(), QtCore.Qt.AlignCenter, QtCore.Qt.TextAlignmentRole)

Как видите, QStandardItem позволяет вам изменять информацию об элементе простым способом, и простым способом вы можете сказать, что это элемент модели.

  • setItemData (): это метод, который позволяет вам изменять информацию о нескольких ролях, связанных с QModelIndex, проверяя, действительны ли роли, как правило, если вы используете недопустимую модель, метод не будет обновлять информацию, но в случае QStandardItemModel, который обрабатывает общую информацию, устанавливает, что все роли допустимы для того, что всегда будет работать.

В случае QStandardItemModel следующие коды эквивалентны:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    model = QtGui.QStandardItemModel(1, 1)
    it = QtGui.QStandardItem()
    model.setItem(0, 0, it)

    # The following lines modify the text shown
    # to be related to the Qt::DisplayRole role and
    # the QModelIndex associated with the QStandardItem:
    it.setText("foo")
    it.setData("foo", QtCore.Qt.DisplayRole)
    model.setData(it.index(), "foo", QtCore.Qt.DisplayRole)
    model.setItemData(it.index(), {QtCore.Qt.DisplayRole: "foo"})

    # The same as the previous lines but in the case of
    # the background and the text colors of the item.
    it.setForeground(QtGui.QColor("red"))
    it.setBackground(QtGui.QColor("blue"))
    it.setData(QtGui.QColor("red"), QtCore.Qt.ForegroundRole)
    it.setData(QtGui.QColor("blue"), QtCore.Qt.BackgroundRole)
    model.setData(it.index(), QtGui.QColor("red"), QtCore.Qt.ForegroundRole)
    model.setData(it.index(), QtGui.QColor("blue"), QtCore.Qt.BackgroundRole)
    model.setItemData(
        it.index(),
        {
            QtCore.Qt.ForegroundRole: QtGui.QColor("red"),
            QtCore.Qt.BackgroundRole: QtGui.QColor("blue"),
        },
    )

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

СИГНАЛ: QStandarditemmodel :: datachanged (...) не испускает роли при использовании QStandarditemmodel :: setData (...))

Добавить класс в QStandardItemModel

Скопируйте QStandardItemModel в другой

QStandardItemModel - добавить строку только с одним элементом

Поиск / удаление строки из QStandardItemModel по данным элемента

Добавление строки с виджетами и текстом к QStandardItemModel

Базовый операнд '->' имеет тип без указателя 'QStandardItemModel'

Распределение элементов в QStandardItemModel

Как полностью перебрать QStandardItemModel?

Как сделать данные постоянными при использовании метода setData

как может отказать метод setData?

Проблема при передаче массива в функцию setData ()

Почему объекты в setData не являются массивом данных?

Есть ли эквивалент LB_SETITEMDATA для раскрывающегося списка HTML?

Как использовать VXYModelMapper с QStandardItemModel?

QStandardItemModel не всегда обновляет QTreeView

Есть ли способ преобразовать модель QTableView в QStandardItemModel

Найти индекс для QStandardItemModel при активированном вызове QCompleter

Как получить доступ к вложенным элементам QStandardItemModel из QML?

Как использовать VXYModelMapper с QStandardItemModel?

Отредактируйте QStandardItemModel через TableView с помощью настраиваемого делегата

QTreeView с QStandardItemModel: как реализовать собственную модель сортировки

pyqt QStandardItemModel Есть ли способ полностью удалить значения из модели?

Можно ли центрировать проверяемый элемент Qstandard в столбце QStandardItemModel?

setData в намерениях RemoteViewService

Обновить DocumentSnapshot после setData () без дополнительного запроса

Не удается найти метод объекта setData - сохранить значение в файле XML

Как получить идентификатор setData в firestore?

Управление массивом для добавления через setData на highcharts

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Merging legends in plotly subplot

  3. 3

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  4. 4

    Проблема с window.print в Safari

  5. 5

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  6. 6

    JetBrains Rider enable-migrations для ASP.NET MVC на Mac

  7. 7

    migrate MongoDB container service - mongodump command not found

  8. 8

    Как создать переменную с использованием класса Color, который включает только выбранные цвета?

  9. 9

    Ошибка XDG0062: не удалось установить «Контент». в режиме навигации MUXC

  10. 10

    Как загрузить ZIP-файл в Nexus с помощью Maven и избежать создания артефакта pom в Nexus?

  11. 11

    QString удалить последние символы

  12. 12

    Symfony 4, Postgres - `Неверное значение параметра client_encoding:« utf8mb4 »` при выполнении команды doctrine

  13. 13

    HTML Body говорит cz-shortcut-listen = "true" с инструментами разработчика Chrome?

  14. 14

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  15. 15

    Как создать простую анимацию в Xamarin с помощью SkiaSharp

  16. 16

    Установка pip с использованием Python 2.7, установленного в ArcGIS

  17. 17

    Qt - не растягивать виджеты в QVBoxLayout

  18. 18

    How to convert C++/CLI string to const char*

  19. 19

    sbt: Как разрешить зависимости Maven, использующие свойства Maven

  20. 20

    Flutter: Unhandled Exception: FileSystemException: Creation failed, path = 'Directory: '' (OS Error: Read-only file system, errno = 30)

  21. 21

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

популярныйтег

файл