Переопределение таблицы стилей Qt в QStyledItemDelegate - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть 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 не очень хорошая идея, но моя единственная альтернатива - иметь другую переменную в таблице стилей, отражающую непрозрачность, и я хотел бы избежать этого любой ценой.

...