【问题标题】:Custom color of selected row in QTableViewQTableView中选定行的自定义颜色
【发布时间】:2013-10-01 10:52:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您是否尝试过在视图的调色板中为QPalette::HighlightQPalette::HighlightedText 角色设置值?
  • 是的,我做到了,但是我使用 QPalette::HighlightedText 设置的颜色生效,但是我使用 QPalette::Highlight 设置的颜色没有生效。

标签: qt qt5 qtableview


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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);
    

    【讨论】:

    • 我实际上已经尝试过了,但奇怪的是,背景颜色从未改变。不过,突出显示的行的文本颜色会更改为我使用调色板设置的颜色。
    • 为我工作,我使用的是 Qt 5.7
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多