версия / окружающая среда:
- Windows 10 64 бит
- Qt 5.11.0 MSVC2017 64 бит
У меня есть простой QComboBox
для включения / отключения функции:
QComboBox *onOffComboBox = new QComboBox();
onOffComboBox->insertItem(0, "Off");
onOffComboBox->insertItem(1, "On");
Поле со списком добавляется как виджет ячейки в таблицу:
this->ui->settingsTable->setCellWidget(rowNumber, 1, onOffComboBox);
Теперь я хочу изменить цвет фона кнопки, но не выбранных элементов.
Мой первый подход заключался в простом использовании функции QWidget
setStyleSheet
:
onOffComboBox->setStyleSheet("background-color: red;");
Но это подавляет стандартный стиль:
Я также использовал варианты с определенными QComboBox
стилями в соответствии с документацией:
onOffComboBox->setStyleSheet("QComboBox::drop-down {background: red;}");
Но это только окрашивает деталь стрелкой и подавляет ее стиль:
Использование только QComboBox {background: red;}
дает тот же результат, что и с background-color: red;
, только выбранные элементы не окрашены.
Так же, как описано в этот ответ, другой подход заключается в использовании QPallete
:
QPalette pal = onOffComboBox->palette();
pal.setColor(QPalette::Base, QColor("red"));
onOffComboBox->setPalette(pal);
onOffComboBox->update(); // just in case this has any effect
Это только цвета выбранных предметов:
Я также попробовал почти все другие QPalette
цветовые роли :
QPalette::Window
, QPalette::Foreground
, QPalette::Button
- ничего не делать
QPalette::Base
- цвета выбранных элементов (см. Рис.)
QPalette::Text
- цвет текста кнопки и выбранных элементов
Итак, как я могу изменить цвет фона QComboBox
кнопки выпадающего меню БЕЗ перезаписи или подавления стандартного стиля?
Стили всплывающих элементов также не должны меняться.
Вот изображение того, что я хочу: