Получить цвет фона при нажатии кнопки QPushButton

Как я могу получить нажатый цвет фона QPushButton?

if (isDown())
    _BGColor = <pressed background color>; // how to get this???
else
    _BGColor = palette().color(QPalette::Background); // this is to get the idle backcolor

Заранее спасибо!!!


person Toots    schedule 08.04.2016    source источник
comment
Добро пожаловать в Stackoverflow. Не могли бы вы объяснить, что вы пытаетесь сделать? Кажется, что получение этого цвета не является хорошей идеей. Может быть, мы сможем найти лучшее решение вашей первоначальной проблемы?   -  person Ilya    schedule 08.04.2016
comment
У меня есть подкласс QPushButton, когда кнопка долго нажимается, я хочу нарисовать круг с обратным цветом фона, а внутри него - символ проверки с цветом фона. Другой вариант для меня - стереть часть круга (сделав эту часть прозрачной), чтобы создать галочку.   -  person Toots    schedule 08.04.2016
comment
То, что я пытаюсь сделать, это круг наложения на моей кнопке с галочкой в ​​​​середине. Это для проверенного свойства кнопки, например, для флажка, но я хочу отобразить его как рисунок.   -  person Toots    schedule 08.04.2016
comment
Вы написали выше код в PaintEvent вашего подкласса, попробуйте написать его в PaintEvent и вызвать функцию обновления в mousePressEvent. Это должно дать вам текущее значение цвета фона.   -  person Atul N    schedule 08.04.2016
comment
Я пытался использовать update() и/или repaint() выше setDown(true), но не получил текущее значение цвета фона.   -  person Toots    schedule 08.04.2016
comment
Дополнительная информация, я использую таблицу стилей для обновления цвета фона для нажатия, наведения и т. д.   -  person Toots    schedule 08.04.2016


Ответы (1)


Очень сложно (если не невозможно) найти способ получить фоновый цвет кнопки при ее нажатии, потому что это зависит от стиля, и не гарантируется, что стиль соответствует палитре.

Однако я предлагаю два разных подхода:

  1. Вы можете установить свой собственный цвет фона с помощью таблиц стилей (проще) или реализовать отрисовку кнопки самостоятельно, используя стили или переопределив paintEvent(). См. раздел Настройка QPushButton.

  2. Чтобы закрасить кнопку инверсным цветом, вы можете установить режим композиции для рисовальщика, чтобы получить инверсный цвет.

Например:

painter.setPen(QColor(255, 255, 255));
painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination);

(обратите внимание, что в этом примере обратный цвет среднего серого (128, 128, 128) точно такой же цвет)

См. QPainter::CompositionMode.

person Fabio    schedule 08.04.2016