QListWidget :: setStyleSheet()和QListWidgetItem :: setBackgroundColor()的关系

时间:2015-08-31 13:01:26

标签: c++ qt qlistwidget qtstylesheets

所以我有一个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()调用时(但我没有项目之间的边框),元素才会以指定的颜色着色。

我如何解决这个问题? (我需要彩色物品和它们之间的边界)。

2 个答案:

答案 0 :(得分:0)

如果这是你想要的结果

listWidget with different backgroundcolors and border-bottom

你可以继承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的示例,但它的工作方式应该类似。