我有一个QTableView
,它使用自定义QStyledItemDelegate
来呈现表的每一行。样式表通过执行以下操作来设置TableView上所选行的背景颜色:
QTableView::item::selected {
background-color: $highlight_color; //this parses to #FFFFFF
}
这可以正常工作,但是在某些情况下,我想通过将所选行的背景设置为半透明来调整其Alpha值。我通过重写paint()
的{{1}}函数来做到这一点。
QStyledItemDelegate
这确实会更改颜色,但是void CustomDelegate::paint(QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index) const {
QColor color(option.palette.color(QPalette::Highlight));
if(isOpaque)
color.setAlphaF(0.5);
painter->fillRect(options.rect, QBrush(background_color));
}
的颜色不正确。此外,我尝试了所有不同的调色板颜色角色,但没有一个能反映样式表中设置的背景颜色。但是,如果我执行以下操作,则可以正常工作(减去不透明度)。
QPalette::Highlight
我已经读过,将Qt样式表和void CustomDelegate::paint(QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index) const {
QStyledItemDelegate::paint(painter, options, index);
}
组合起来并不是一个好主意,但是我唯一的选择是在样式表中增加一个反映不透明度的变量,我不惜一切代价避免这种情况。