2016-03-22 15 views
1

Ich bin mit dem folgenden Stylesheet auf einem QTreeWidget den Artikel Stil zu ändern:QTreeWidgetItem Farbe

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

Danach versuche ich den folgenden Code zu verwenden, um die Farbe einiger spezifischer Zellen zu ändern:

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

Aber die Farbe ändert sich nicht. Ich entdeckte dann, dass, wenn ich das Stylesheet aus dem QTreeWidget entferne, die Farbänderung funktioniert.

Irgendeine Idee, wie man die Hintergrundfarbe ändert, um zu arbeiten, das stylesheet bleibend?

Antwort

2

Verwenden Sie einen benutzerdefinierten Delegaten, um Ihre Elemente anstelle von Stylesheets zu malen.

reimplementieren die paint() Methode, um die Art und Weise zu steuern, wie werden die Elemente gezogen:

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

Und das ist, wie Sie Ihren Delegaten verwenden:

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

Mehr Dokumentation hier: http://doc.qt.io/qt-5/model-view-programming.html#delegate-classes

+0

I habe es funktioniert, danke. Jetzt muss ich die Dokumentation lesen, um es zu verstehen :) Das Problem, das ich jetzt habe, ist, dass 'resizeColumnToContents' nicht gut funktioniert; Ich werde sehen, ob ich das Problem herausfinden. – hteso

Verwandte Themen