更改QTreeView的特定列的文本颜色

时间:2017-11-15 17:08:25

标签: qt stylesheet selecteditem qtreewidget

我有从QTreeView继承的小部件,我想更改文本颜色,但仅限于特定列。目前我设置了样式表,因此当选择项目时,整行将文本颜色更改为红色。

QTreeView::item:selected {color: red}

我想在选择项目时仅更改第一列的颜色。我知道如何更改特定列的颜色(在模型上使用ForegroundRole并检查索引列),但我不知道如何检查是否在模型中选择了索引。

2 个答案:

答案 0 :(得分:2)

您可以使用代理:

class MyDelegate : public QStyledItemDelegate {
public:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
        if (option.state & QStyle::State_Selected) {
            QStyleOptionViewItem optCopy = option;
            optCopy.palette.setColor(QPalette::Foreground, Qt::red);
        }
        QStyledItemDelegate::paint(painter, optCopy, index);
    }
}

myTreeWidget->setItemDelegateForColumn(0, new MyDelegate);

答案 1 :(得分:0)

所以这就是我解决它的方式。

class MyDelegate : public QStyledItemDelegate {
public:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { 
        QString text_highlight;
        if (index.column() == 0)){
            text_highlight = BLUE;
        } else{
            text_highlight = RED;
        }
        QStyleOptionViewItem s = *qstyleoption_cast<const QStyleOptionViewItem*>(&option);
        s.palette.setColor(QPalette::HighlightedText, QColor(text_highlight));
        QStyledItemDelegate::paint(painter, s, index);
    }
}