2015-08-31 6 views
0

Так что у меня QListWidget объект, и я поставил это:QListWidget :: setStyleSheet() и QListWidgetItem :: setBackgroundColor() отношение

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); 

Проблема заключается в том, что все элементы будут белыми (а не тёмно-серый или greenDark, как я указал).

Элементы будут окрашены в указанные цвета только в том случае, если я опускаю вызов QListWidget::setStyleSheet() (но тогда у меня нет границы между элементами).

Как я решаю это? (Мне нужны цветные предметы и граница между ними).

+0

Что произойдет, если вы установите таблицу стилей 'myQlistWidgetItem'? –

+0

Как я это делаю? Я не понимаю, что ты понял. –

+0

'myQListWidgetItem-> setStyleSheet (....)' и указать таблицу стилей для нужного цвета границы и фона. –

ответ

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() 
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, но он должен работают аналогично.