选择单元格时,更改 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 中使用 Enter 键导航
PySide QTableView setData 用于多个单元格