0

我有一个QTableView使用自定义QStyledItemDelegate来呈现表格的每一行。样式表通过执行以下操作来设置 TableView 上选定行的背景颜色:

QTableView::item::selected {
    background-color: $highlight_color; //this parses to #FFFFFF
}

这可以正常工作,但在某些情况下,我想通过使其半透明来调整所选行背景的 alpha。我通过覆盖paint().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不正确。此外,我尝试了所有不同的调色板颜色角色,但它们都没有反映样式表中设置的背景颜色。但是,如果我执行以下操作,它就可以正常工作(减去不透明度)。

void CustomDelegate::paint(QPainter* painter,
                           const QStyleOptionViewItem& option,
                           const QModelIndex& index) const {
    QStyledItemDelegate::paint(painter, options, index);
}

我已经读过结合 Qt 样式表QPalette并不是一个好主意,但我唯一的选择是在样式表中使用另一个变量来反映不透明度,我想不惜一切代价避免这种情况。

4

0 回答 0