Как установить цвет фона виджета, например, поля со списком или двойное вращение?

StackOverflow https://stackoverflow.com/questions/177778

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь установить цвет фона для окна двойного вращения, и я не уверен, какую функцию мне следует использовать.

Я видел некоторую функцию с именем 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top