更改 QTableWidget 默认选择颜色,并使其半透明
Posted
技术标签:
【中文标题】更改 QTableWidget 默认选择颜色,并使其半透明【英文标题】:Change QTableWidget default selection color, and make it semi transparent 【发布时间】:2017-02-14 12:55:26 【问题描述】:我正在尝试更改 QTableWidget 中选择的默认颜色,但我需要使其透明,以便我仍然可以看到底层单元格的颜色。
我用过:
self.setStyleSheet("QTableView selection-background-color: rgba(255, 0, 0, 50); ")
self.setSelectionBehavior(QAbstractItemView.SelectRows)
所以现在选择颜色有点红色,但有些单元格定义为:
cell.setBackgroundColor(color)
...
self.setItem(i, j, cell)
单元格的颜色仍然被选择颜色覆盖(没有混合,只是粉红色选择)。我尝试为单元格设置前景色而不是背景色:
brush = QBrush(color, Qt.SolidPattern)
cell.setForeground(brush)
但它不会改变任何东西。 那么有没有一种简单的方法可以做到这一点,还是我应该手动处理选择? (用我自己的颜色重新绘制选定的行) 提前致谢。
【问题讨论】:
尝试使用 only 样式表,QTableWidget::item background-color: rgba(255, 0, 0, 50%);
设置正常单元格颜色,QTableWidget::item:selected background-color: rgba(20, 0, 0, 50%)
设置选定单元格颜色
如果我使用QTableWidget::item
设置背景颜色,每个单元格的背景颜色都是一样的,对吧?问题是我们为每个单元格设置了不同的颜色,我们将小部件重新用于显示三值矩阵,所以颜色才是最重要的
你是对的,所以据我了解,你需要为每个单元格使用不同的颜色,但选择的颜色,对于每个单元格必须是相同的,并且具有一定的透明度(在你的情况下为红色),然后尝试将您的样式表应用到您的 QTableWidget
上,仅使用 QTableWidget::item:selected background-color: rgba(255, 0, 0, 50%)
我试过只使用你给我的那条线(顺便说一句,这条线和QTableView selection-background-color: rgba(255, 0, 0, 50);
有区别吗)但结果最终是相同的Visual。此外,选择不必是红色甚至是颜色:如果 a 可以圈出整行也可以。
【参考方案1】:
我有几乎相同的场景,但是我在单元格中有文本,我想要完全透明的选择(所以不改变背景颜色) 如果您设置透明颜色,它将是实心的(qt 中的错误?)所以我将文本设置为 BOLD(= 选中)并打开选择样式 这里的代码,也许它会有所帮助
//.h
#include <QStyledItemDelegate>
class SelectionControlDelegate : public QStyledItemDelegate
public:
SelectionControlDelegate(QObject* parent = 0);
void initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const override;
;
//.cpp
SelectionControlDelegate::SelectionControlDelegate(QObject* parent) : QStyledItemDelegate(parent)
void SelectionControlDelegate::initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const
QStyledItemDelegate::initStyleOption(option, index);
const bool selected = option->state & QStyle::State_Selected;
option->font.setBold(selected); // this will represent selected state
if (selected)
option->state = option->state & ~QStyle::State_Selected; // this will block selection-style = no highlight
// in widget class
...
_ui->tableView->setItemDelegate(new SelectionControlDelegate(this));
...
// when setting cell background, i would change also text color
QColor textColor = backgroundColor.value() <= 120 ? Qt::white : Qt::black; // if it is dark, text would be white otherwise black
// or you can compute invert color...
这是我的可视化:选择了 5% 和 25% 的项目
选择展示
【讨论】:
以上是关于更改 QTableWidget 默认选择颜色,并使其半透明的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 qtablewidget 项的 qtooltip 的背景颜色?