改变QTableWidget的默认选择颜色,并使其半透明
Change QTableWidget default selection color, and make it semi transparent
我正在尝试更改 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)
但这并没有改变任何东西。
那么有没有一种简单的方法可以做到这一点,还是我应该手动处理选择?
(用我自己的颜色重新绘制选定的行)
提前致谢。
我遇到了几乎相同的情况,但是插入了单元格中的文本并且我想要完全透明的选择(因此背景颜色没有变化)
如果您设置透明颜色,它将是纯色(qt 中的错误?)所以我将文本设置为粗体(= 选中)并选择样式
代码在这里,也许会有帮助
//.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 中用于选择的默认颜色,但我需要使其透明以便我仍然可以看到底层单元格的颜色。
我用过:
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)
但这并没有改变任何东西。 那么有没有一种简单的方法可以做到这一点,还是我应该手动处理选择? (用我自己的颜色重新绘制选定的行) 提前致谢。
我遇到了几乎相同的情况,但是插入了单元格中的文本并且我想要完全透明的选择(因此背景颜色没有变化) 如果您设置透明颜色,它将是纯色(qt 中的错误?)所以我将文本设置为粗体(= 选中)并选择样式 代码在这里,也许会有帮助
//.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% 的项目
评选介绍