Как установить цвет фона виджета, например, поля со списком или двойное вращение?
Вопрос
Я пытаюсь установить цвет фона для окна двойного вращения, и я не уверен, какую функцию мне следует использовать.
Я видел некоторую функцию с именем SetBackgroundRole
, которая принимает Qt :: ColorRole
, но я не уверен, как использовать эту функцию.
Пожалуйста, дайте мне знать, каков простой способ изменить цвет фона QComboBox
или QDoubleSpinBox
?
Решение
Использование QPalette
не обязательно будет работать для всех стилей, поскольку авторы стилей ограничены рекомендациями различных платформ и собственным механизмом тем.
Чтобы убедиться, что цвет вашего фона будет правильным, я бы предложил использовать стиль Qt Лист . Вот что я сделал, чтобы изменить цвет фона QComboBox
:
myComboBox- > setStyleSheet (" QComboBox {background-color: blue;} ");
Я специально не пробовал использовать QSpinBox
, но, думаю, он будет работать так же!
Другие советы
Это обычно правильно, но не учитывает виджеты (например, спин-боксы и кнопки / списки), которые используют другую роль фона в палитре. Более общее решение будет примерно таким:
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
Кроме того, вы можете просмотреть описания различных ролей палитры и выяснить, какую вы хотите, а затем применить ее к виджету, содержащему другие, которые вы хотите изменить. Изменения палитры должны распространяться на дочерние виджеты.
На самом деле, если вы посмотрите документы Qt для QPalette в случае QComboBox, роль фона, вероятно, не та, которую вы хотите. То, что вы хотите, это:
QPalette :: Base Используется в основном в качестве цвета фона для виджетов для ввода текста, но также может использоваться и для других рисунков, таких как фон выпадающих списков комбинированного списка и маркеры панели инструментов. Обычно это белый или другой светлый цвет.
Итак, вот код, который я использую, чтобы установить цвет фона поля со списком, который я использую, чтобы соответствовать цвету виджета, на котором он находится:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
По-видимому, в Qt 4.1 и далее вам нужно установить this-> gA; setAutoFillBackground (true);
для палитры, чтобы применить цвет фона.
Хотя предыдущие ответы могут устанавливать цвет фона для нередактируемого QComboBox
, они не работают для редактируемого QComboBox
. В этом случае вам нужно получить виджет QLineEdit
, используемый для редактирования, и сбросить его фон. Р>
Вот как я заставил это работать:
QComboBox *myComboBox = new QComboBox();
myComboBox->setEditable(true);
QColor backColor = QColor(246, 230, 230);
QLineEdit *lineEditor = myComboBox->lineEdit();
QPalette pal = lineEditor->palette();
pal.setColor(QPalette::Base, backColor);
lineEditor->setPalette(pal);
Создайте синюю палитру независимо от фактического виджета.
comboBox->setPalette( QPalette( Qt::blue ) );
Я бы попробовал что-то вроде
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );
У меня отлично работает! Р>
Ранее ответы не работали для меня, но я собрал все ответы и, наконец, работал над Qt 5.12 :
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);