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