所以我有一个QListWidget
对象,我设置了这个:
ui.myQListWidget->setStyleSheet("QListWidget::item { border-bottom: 1px solid black; }")
在构造对象之前。
然后我想在新创建的QListWidgetItem
列表中添加一些QListWidget
个对象。
我有这样的事情:
if(stuff) {
myqlistwidgetitem->setBackgroundColor(Qt::GlobalColor::darkGray);
}
else if(other_stuff) {
myQListWidgetItem->setBackgroundColor(Qt::GlobalColor::lightGray);
}
ui.myQListWidget->addItem(myQListWidgetItem);
问题是所有元素都是白色的(而不是我指定的darkGray或greenDark)。
只有在省略QListWidget::setStyleSheet()
调用时(但我没有项目之间的边框),元素才会以指定的颜色着色。
我如何解决这个问题? (我需要彩色物品和它们之间的边界)。
答案 0 :(得分:0)
如果这是你想要的结果
你可以继承QStyledItemDelegate
,覆盖paint()
方法并将其设置为itemDelegate到你的listWidget。我不知道c ++,但我认为,你可以从我的python3 / pyqt5例子中看到这种方式:
class myDelegate(QtWidgets.QStyledItemDelegate):
def __init__(self, parent=None):
QtWidgets.QStyledItemDelegate.__init__(self)
self.setParent(parent)
# offset item.rect - colored rect
self.offset = 2
# different backgroundcolors
self.brush = QtGui.QBrush(QtGui.QColor('white'))
self.brush1 = QtGui.QBrush(QtGui.QColor('darkGray'))
self.brush2 = QtGui.QBrush(QtGui.QColor('lightGray'))
# textcolor
self.textpen = QtGui.QPen(QtGui.QColor(0,0,0))
# linecolor and -width
self.linePen = QtGui.QPen(QtGui.QColor(0,0,0))
self.linePen.setWidth(2)
# Alignment
self.AlignmentFlag = QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter
def paint(self, painter, option, index):
# rect to fill with backgroundcolor
itemRect = option.rect.adjusted(self.offset, self.offset, -self.offset, -self.offset)
# text of the item to be painted
text = self.parent().item(index.row()).text()
painter.save()
# conditions for different backgroundcolors
if text[0] == 'a':
color = self.brush1
elif text[0] == 'C':
color = self.brush2
else:
color = self.brush
# paint backgroundcolor
painter.fillRect(itemRect,color)
# paint text
painter.setPen(self.textpen)
painter.drawText(itemRect, self.AlignmentFlag, text)
# paint bottom border
painter.setPen(self.linePen)
painter.drawLine(option.rect.bottomLeft(), option.rect.bottomRight())
painter.restore()
答案 1 :(得分:0)
另一种可能性是为您的商品提供属性,然后在样式表中对该属性做出反应。
例如,在您编写的代码中:
ui.myLabel->setProperty("stuff","1");
ui.myOtherLabel->setProperty("stuff","2");
在qss中你会写:
QLabel[stuff="1"] {
background-color: #7777ff;
}
QLabel[stuff="2"] {
background-color: #ff5555;
}
我没有QListWidgetItem的示例,但它的工作方式应该类似。