4

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

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

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

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

我正在使用带有 C++ 的 Qt 5.1.0(32 位)。

4

2 回答 2

4

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

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);
于 2013-09-26T07:17:04.210 回答
2

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

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

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

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

于 2015-07-29T08:35:19.130 回答