Я смущен , как использовать УстановитьДанный , 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()
Если вы хотите понять концепции модели Qt, вам следует прочитать следующие руководства:
Учитывая, что вы внимательно прочитали предыдущие ссылки, мы постараемся объяснить разницу между различными методами, которые вы указываете:
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 позволяет вам изменять информацию об элементе простым способом, и простым способом вы можете сказать, что это элемент модели.
В случае 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] Удалить.
я говорю два предложения