Как установить цвет фона кнопки QComboBox? - PullRequest
0 голосов
/ 12 января 2019

версия / окружающая среда:

  • 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);

enter image description here

Теперь я хочу изменить цвет фона кнопки, но не выбранных элементов.

Мой первый подход заключался в простом использовании функции QWidget setStyleSheet:

onOffComboBox->setStyleSheet("background-color: red;");

Но это подавляет стандартный стиль:

enter image description here

Я также использовал варианты с определенными QComboBox стилями в соответствии с документацией:

onOffComboBox->setStyleSheet("QComboBox::drop-down {background: red;}");

Но это только окрашивает деталь стрелкой и подавляет ее стиль:

enter image description here

Использование только 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

Это только цвета выбранных предметов:

enter image description here

Я также попробовал почти все другие QPalette цветовые роли :

  • QPalette::Window, QPalette::Foreground, QPalette::Button - ничего не делать
  • QPalette::Base - цвета выбранных элементов (см. Рис.)
  • QPalette::Text - цвет текста кнопки и выбранных элементов

Итак, как я могу изменить цвет фона QComboBox кнопки выпадающего меню БЕЗ перезаписи или подавления стандартного стиля?

Стили всплывающих элементов также не должны меняться.

Вот изображение того, что я хочу:

enter image description here

1 Ответ

0 голосов
/ 28 января 2019

QComboBox всегда сложно настроить, потому что он состоит из подвиджетов (даже условных подвиджетов).
Я сделал тесты, и ваша простая таблица стилей QComboBox {background:red} почти нормально работает для меня в Linux, за исключением того, что рамка в окне также красная. Поведение кажется различным в зависимости от стиля GUI .

Из документа :

Примечание: со сложными виджетами, такими как QComboBox и QScrollBar, если один свойство или подчиненный элемент управления настраиваются, все остальные субэлементы управления также должны быть настроены.

Похоже, вам нужно настроить все, если вы хотите настроить кнопку ... Тогда было бы невозможно изменить цвет без перезаписи или подавления стандартного стиля.

Вы могли бы оформить весь раскрывающийся список, чтобы имитировать нативный внешний вид, но это нехорошо делать и не быть надежным (и не переносимым).

QComboBox QAbstractItemView {
  border: 1px solid grey;
  background: white;
  selection-background-color: blue;
}
QComboBox {
  background: red;
}
...