QTableView中选定行的自定义颜色

QTableView中选定行的自定义颜色,qt,qt5,qtableview,Qt,Qt5,Qtableview,我正在将QTableView与从QabStretctTableModel()继承的自定义模型一起使用。此模型根据显示的值更改某些单元格的前景色和背景色。 我已将选择行为设置为选择整行 问题是,当我选择一行时,整行的背景色变为标准橙色,文本颜色变为白色。删除选择后,它将恢复为模型设置的内容 我想做的是,当用户选择一行时,它的前景色和背景色不应该改变 我尝试设置Qpalete,但我无法找到实现上述目标的方法 我用Qt5.1.0(32位)用C++。 您可以在表视图类中执行以下操作: const QCo

我正在将QTableView与从QabStretctTableModel()继承的自定义模型一起使用。此模型根据显示的值更改某些单元格的前景色和背景色。 我已将选择行为设置为选择整行

问题是,当我选择一行时,整行的背景色变为标准橙色,文本颜色变为白色。删除选择后,它将恢复为模型设置的内容

我想做的是,当用户选择一行时,它的前景色和背景色不应该改变

我尝试设置Qpalete,但我无法找到实现上述目标的方法


我用Qt5.1.0(32位)用C++。

您可以在表视图类中执行以下操作:

const QColor hlClr = Qt::red; // highlight color to set
const QColor txtClr = Qt::white; // highlighted text color to set

QPalette p = palette();
p.setColor(QPalette::Highlight, hlClr);
p.setColor(QPalette::HighlightedText, txtClr);
setPalette(p);

QTableView和QTreeView使用QStyledItemDelegate,这将忽略调色板,因为它只是将高亮显示的行渲染得更暗。至少,我在使用交替行颜色时注意到了这一点,但它也适用于静态行颜色

现在,您可以使用QItemDelegate(虽然看起来很糟糕,但没有悬停高亮显示),也可以使用样式表覆盖该行为。我喜欢后者:

setStyleSheet("QTreeView::item:selected{background-color: palette(highlight); color: palette(highlightedText);};");

这将使所选项目在我的Windows 8.1中背景为蓝色,文本颜色为黑色。现在,您可以轻松地在调色板中设置Highlight和HighlightedText以获得其他颜色。

您是否尝试过在视图调色板中设置
Qpalete::HighlightedText
Qpalete::HighlightedText
角色的值?是的,我尝试过,但我使用Qpalete::HighlightedText设置的颜色生效,但是我用Qpalete::Highlight设置的颜色没有效果。事实上我已经试过了,但奇怪的是,背景颜色从未改变。尽管如此,高亮显示行的文本颜色更改为我使用调色板设置的颜色