在QStyledItemDelegate中覆盖Qt样式表

时间:2018-11-03 04:05:36

标签: qt qtableview qtstylesheets qstyleditemdelegate qpalette

我有一个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); } 组合起来并不是一个好主意,但是我唯一的选择是在样式表中增加一个反映不透明度的变量,我不惜一切代价避免这种情况。

0 个答案:

没有答案