Рисование пользовательского QWidget на основе значения псевдосостояния таблицы стилей

У меня есть собственный QWidget (фактически, производный от QAbstractButton ), для которого я должен реализовать свой собственный paintEvent . Как использовать информацию о таблице стилей?

Например, предположим, что кто-то определяет следующую таблицу стилей, которая применяется (напрямую или через наследование) к моему пользовательскому классу:

QAbstractButton { font-weight: bold; background-color: red }
QAbstractButton:checked { background-color: blue }

В моем методе paintEvent , как мне получить правильный цвет фона для отображения в отмеченном состоянии?

void MyButton::paintEvent(QPaintEvent */*event*/) {
  ensurePolished();  // Don't think this is necessary...
  qDebug() << Q_FUNC_INFO << isChecked();  // This is showing the right value
  QStylePainter painter(this);
  painter.fillRect(rect(), painter.background());  // always red, even if checked
}

Я предполагаю, что мне нужно что-то вроде:

if (isChecked()) {
  // painter.fillRect(rect(), ???);
  // 
  // style()->drawPrimitive(???, ...);
  //
  // QStyleOptionButton opt;
  // opt.initFrom(this);
  // QBrush bg_brush = opt.???
  // painter.fillRect(rect(), bg_brush);
  //
  // ???
} else {
  painter.fillRect(rect(), painter.background());
}

Как мне заставить кисть использовать для фона с отмеченным состоянием, который Qt решил из стиля листов?

6
задан Daniel Hedberg 12 March 2013 в 22:45
поделиться