我正在使用带有从 QAbstractTableModel() 继承的自定义模型的 QTableView。此模型根据显示的值更改某些单元格的前景色和背景色。我已将选择行为设置为选择整行。
问题是当我选择一行时,整个行的背景颜色变成标准的橙色,文本颜色变成白色。删除选择后,它会恢复为模型设置的内容。
我想要做的是,当用户选择一行时,它的前景色和背景色不应该改变。
我尝试设置 QPalette 但我无法找到实现上述目标的方法。
我正在使用带有 C++ 的 Qt 5.1.0(32 位)。
我正在使用带有从 QAbstractTableModel() 继承的自定义模型的 QTableView。此模型根据显示的值更改某些单元格的前景色和背景色。我已将选择行为设置为选择整行。
问题是当我选择一行时,整个行的背景颜色变成标准的橙色,文本颜色变成白色。删除选择后,它会恢复为模型设置的内容。
我想要做的是,当用户选择一行时,它的前景色和背景色不应该改变。
我尝试设置 QPalette 但我无法找到实现上述目标的方法。
我正在使用带有 C++ 的 Qt 5.1.0(32 位)。
您可以在表视图类中执行以下操作:
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 以获得其他颜色。