2016-03-22 11 views
1

Я использую следующую таблицу стилей на QTreeWidget, чтобы изменить стиль пунктов:QTreeWidgetItem цвет

QTreeWidget::item 
{ 
    padding-left:10px; 
    padding-top: 1px; 
    padding-bottom: 1px; 
    border-left: 10px; 
} 

После этого я пытаюсь использовать следующий код, чтобы изменить цвет некоторых специфических клеток:

// item is a QTreeWidgetItem 
item->setBackgroundColor(1, QColor(255, 129, 123)); 

Но цвет не меняется. Затем я обнаружил, что, если я удалю таблицу стилей из QTreeWidget, тогда изменится цвет.

Любая идея, как изменить цвет фона на работу, сохраняя таблицу стилей?

ответ

2

Используйте пользовательский делегат, чтобы нарисовать ваши элементы вместо таблиц стилей.

Переопределить метод paint() для управления способом, как рисуются элементы:

class CMyDelegate : public QStyledItemDelegate 
{ 
public: 
    CMyDelegate(QObject* parent) : QStyledItemDelegate(parent) {} 

    void CMyDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override; 
} 

void CMyDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex & index) const 
{ 
    QStyleOptionViewItemV4 itemOption(option) 
    initStyleOption(&itemOption, index); 

    itemOption.rect.adjust(-10, 0, 0, 0); // Make the item rectangle 10 pixels smaller from the left side. 

    // Draw your item content. 
    QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &itemOption, painter, nullptr); 

    // And now you can draw a bottom border. 
    painter->setPen(Qt::black); 
    painter->drawLine(itemOption.rect.bottomLeft(), itemOption.rect.bottomRight()); 
} 

И это, как использовать делегат:

CMyDelegate* delegate = new CMyDelegate(tree); 
tree->setItemDelegate(delegate); 

Дополнительная документация здесь: http://doc.qt.io/qt-5/model-view-programming.html#delegate-classes

+0

I имейте это работать, спасибо. Теперь я должен прочитать документацию, чтобы понять это :) Проблема, с которой я столкнулся сейчас, заключается в том, что 'resizeColumnToContents' работает не очень хорошо; Я посмотрю, пойму ли я эту проблему. – hteso