我正在使用QTableView和一个继承自QAbstractTableModel()的自定义模型。这个模型改变了前景和某些单元格的背景颜色基于显示的值。 我已将选择行为设置为选择整行。
问题在于,当我选择一行时,整行的背景颜色变为标准橙色,文本颜色变为白色。删除选择后,它将恢复为模型设置的内容。
我想要做的是当用户选择一行时,它的前景&背景颜色不应该改变。
我尝试设置QPalette,但我无法找到实现上述目标的方法。
我正在使用Qt 5.1.0(32位)和C ++。
答案 0 :(得分:2)
您可以在表视图类中执行以下操作:
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);
答案 1 :(得分:1)
QTableView和QTreeView使用QStyledItemDelegate,它会忽略调色板,因为它只会使突出显示的行变暗。至少,我在使用交替的行颜色时注意到了这一点,但它也适用于静态行颜色。
现在,您可以使用QItemDelegate(看起来很糟糕,但没有悬停突出显示),或者您可以使用样式表覆盖行为。我更喜欢后者:
setStyleSheet("QTreeView::item:selected{background-color: palette(highlight); color: palette(highlightedText);};");
这将使所选项目在背景中呈蓝色,在Windows 8.1中以文本颜色呈现黑色。现在,您可以在调色板中轻松设置Highlight和HighlightedText以获得其他颜色。