我有一个模型/视图三个元素,我想用不同的颜色。我可以通过以下方式实现这一目标:
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_())
产生了预期的结果:
然而,在这种情况下,模型需要知道颜色信息,并且在不触及代码的情况下无法更改颜色信息。有没有办法定义类似listViewItemProperty
的内容,我可以使用stylesheet
?
对于QListWidget
我可以设置我可以设置属性的属性,然后我可以在样式表中使用它们,如:
QListWidgetItem[valid="true"] {
background-color: #FF0000;
}
理想情况下,我想在模型中返回一些布尔标志。然后在样式表中定义如何绘制它。如果可能,我想避免delegates
。