选择单元格时,更改 QTableView 中图标的颜色突出显示

Posted

技术标签:

【中文标题】选择单元格时,更改 QTableView 中图标的颜色突出显示【英文标题】:Change color highlight of icons in QTableView, when the cell is selected 【发布时间】:2013-12-20 11:52:03 【问题描述】:

当在QTableView中选中一个单元格时,其中的图标会被赋予蓝色高亮,如何控制或禁用这个高亮的颜色?

我尝试设置 QPalette::Highlight 但没有成功。

编辑:

好的,所以我知道如何更改背景颜色和文本颜色以及颜色突出显示,但不知道如何更改图标。如果我返回一个图标作为单元格的装饰,则在选择该单元格时会给出浅蓝色突出显示。如何删除它?

【问题讨论】:

图标的背景是否透明? 【参考方案1】:

您可以使用样式表来定义元素的颜色。您的QTableView 中所选项目的名称是selection-background-color。因此,更改此元素的颜色,您将选择您喜欢的背景颜色。

#include <QtWidgets/QApplication>
#include <QtWidgets/QTableView>
#include <QStandardItemModel>

int main(int argc, char* argv[]) 
    QApplication app(argc, argv);

    QTableView *table = new QTableView();
    QStandardItemModel *model = new QStandardItemModel(2,2);

    table->setModel(model);
    table->setStyleSheet("selection-background-color: red");

    table->show();

    return app.exec();

看看它在图片中的样子:

【讨论】:

是的,但这对图标没有任何作用。至少我没有去做。你能做到吗? 当您说“图标”时,您的意思是“表头”? 不,您可以通过返回图像作为单元格的装饰项来设置图标。每个单元格都可以有自己的图标。【参考方案2】:

我发现了解决这个问题的方法,但它需要一些成本。

从根本上说,在 Qt 代码的深处,它调用QIcon::paint() 并将QIcon::Selected 作为图标模式传递,所以问题是图标像素图在所需分辨率下的“选定”形式是自动生成的由 Qt 提供。

我通过将图标的Selected 形式设置为与Normal 模式相同来解决此问题:

  // Make the "Selected" version of the icon look the same as "Normal".
  for (const auto& size : icon.availableSizes())
  
    icon.addPixmap(icon.pixmap(size, QIcon::Normal, QIcon::Off),
                   QIcon::Selected, QIcon::Off);
    icon.addPixmap(icon.pixmap(size, QIcon::Normal, QIcon::On),
                   QIcon::Selected, QIcon::On);
  

缺点是花费了额外的时间,可能需要额外的内存来存储它,并且浪费时间生成我们要丢弃的选定图标。

在我的例子中,我使用的是 QStyledItemDelegate,不幸的是,如果不完全重新实现 QStyle::CE_ItemViewItem 在您的样式中的呈现方式,您无法更密切地影响图标的呈现方式。

想一想,如果您使用代理样式,覆盖CE_ItemViewItem 的呈现方式以不使用选定图标并不难,因此这也是一个选项。

【讨论】:

这应该是选择的答案。这是我最终使用的解决方案:QIcon icon(file_path)icon.addFile(file_path, QSize(), QIcon::Selected)【参考方案3】:

用 Qt 中的标准样式来改变这种行为是完全不可能的。您需要实现自己的特定样式才能解决此问题。

【讨论】:

以上是关于选择单元格时,更改 QTableView 中图标的颜色突出显示的主要内容,如果未能解决你的问题,请参考以下文章

编辑 QTableView 单元格时设置初始文本

编辑单元格时如何在 QTableView 中使用 Enter 键导航

选择单元格时更改图像

PySide QTableView setData 用于多个单元格

swift - 在UITableView中选择单元格时如何更改按钮名称?

在iOS中选择单元格时如何以编程方式更改原型单元格中的标签文本颜色和图像