Переопределение таблицы стилей Qt в QStyledItemDelegate
У меня есть QTableView
который использует обычай QStyledItemDelegate
визуализировать каждую строку таблицы. Таблица стилей устанавливает цвет фона выбранной строки в TableView следующим образом:
QTableView::item::selected {
background-color: $highlight_color; //this parses to #FFFFFF
}
Это работает, как и должно, но при определенных условиях я хотел бы настроить альфа-фон фона выбранной строки, сделав его полупрозрачным. Я делаю это, переопределяя 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
это не очень хорошая идея, но моя единственная альтернатива - иметь другую переменную в таблице стилей, которая отражает непрозрачность, и я хотел бы избежать этого любой ценой.