设置modelitem的属性

时间:2017-09-20 20:12:52

标签: python-3.x model-view-controller qt5 stylesheet pyqt5

我有一个模型/视图三个元素,我想用不同的颜色。我可以通过以下方式实现这一目标:

from PyQt5.QtCore import QAbstractTableModel, QVariant, QModelIndex, Qt
from PyQt5.QtWidgets import QTableView, QApplication
from PyQt5.QtGui import QColor
import sys

class Model(QAbstractTableModel):
    def columnCount(self, parent=QModelIndex()):
        return 2

    def rowCount(self, parent=QModelIndex()):
        return 4

    def data(self, index, role=Qt.DisplayRole):
        if role == Qt.DisplayRole:
            return f'{index.row()} - {index.column()}'
        elif role == Qt.BackgroundRole:
            if index.column() % 2:
                return QColor(Qt.green)
            else:
                return QColor(Qt.blue)
        elif role == Qt.ForegroundRole:
            if index.row() % 2:
                return QColor(Qt.black)
            else:
                return QColor(Qt.red)
        else:
            return QVariant()

app = QApplication(sys.argv)
model = Model()
view = QTableView()
view.setModel(model)
view.show()

sys.exit(app.exec_())

产生了预期的结果:

enter image description here

然而,在这种情况下,模型需要知道颜色信息,并且在不触及代码的情况下无法更改颜色信息。有没有办法定义类似listViewItemProperty的内容,我可以使用stylesheet

对于QListWidget我可以设置我可以设置属性的属性,然后我可以在样式表中使用它们,如:

QListWidgetItem[valid="true"] {
   background-color: #FF0000;
}

理想情况下,我想在模型中返回一些布尔标志。然后在样式表中定义如何绘制它。如果可能,我想避免delegates

0 个答案:

没有答案