更改 QTreeView 特定列的文本颜色
Change text color of a specific column for QTreeView
我有一个继承自 QTreeView 的小部件,我想更改文本颜色,但仅限于特定列。目前我设置了样式表,所以在选择项目时整行将文本颜色更改为红色。
QTreeView::item:selected {color: red}
我只想更改选中项目时第一列的颜色。我知道如何更改特定列的颜色(在模型上使用 ForegroundRole 并检查索引列),但我不知道如何检查模型中是否选择了索引。
您可以为此使用委托:
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);
所以我就是这样解决的。
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);
}
}
我有一个继承自 QTreeView 的小部件,我想更改文本颜色,但仅限于特定列。目前我设置了样式表,所以在选择项目时整行将文本颜色更改为红色。
QTreeView::item:selected {color: red}
我只想更改选中项目时第一列的颜色。我知道如何更改特定列的颜色(在模型上使用 ForegroundRole 并检查索引列),但我不知道如何检查模型中是否选择了索引。
您可以为此使用委托:
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);
所以我就是这样解决的。
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);
}
}