Подтвердить что ты не робот

Как установить цвет фона виджета, например, combobox или double spin box?

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

Я видел некоторую функцию под названием SetBackgroundRole, которая принимает Qt::ColorRole, но я не уверен, как ее использовать.

Пожалуйста, дайте мне знать, какой простой способ изменить цвет фона QComboBox или QDoubleSpinBox?

4b9b3361

Ответ 1

Использование QPalette не гарантирует работу для всех стилей, поскольку авторы стилей ограничены рекомендациями разных платформ и движком родных тем.

Чтобы убедиться, что ваш фоновый цвет будет правильным, я бы предложил использовать Qt Style Sheet. Вот что я сделал, чтобы изменить цвет фона QComboBox:

myComboBox->setStyleSheet("QComboBox { background-color: blue; }");

Я специально не пробовал для QSpinBox, но я думаю, он будет работать так же!

Ответ 2

fhe, как правило, правильный, но не учитывает виджетов (например, спин-боксы и кнопки /comboboxes ), которые используют другую фоновую роль в палитре. Более общее решение будет примерно таким:

QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);

В качестве альтернативы вы можете посмотреть описания различных ролей палитр и выяснить, какой именно вы хотите, а затем применить его к виджету, содержащему другие, которые вы хотите изменить. Изменения палитры должны распространяться на дочерние виджеты.

Ответ 3

По-видимому, в Qt 4.1 и далее вам нужно установить this->setAutoFillBackground( true ); для палитры, чтобы применить цвет фона.

Ответ 4

На самом деле, если вы посмотрите на Qt docs для QPalette в случае QComboBox, фоновая роль, вероятно, не то, что вы хотите. Вы хотите:

QPalette:: Base Используется в основном как цвет фона для виджетов ввода текста, но также может использоваться для другой раскраски - например, в виде выпадающих списков combobox и ручек панели инструментов. Это обычно белый или другой светлый цвет.

Итак, вот код, который я использую, чтобы установить цвет фона в поле со списком, которое я использую, чтобы соответствовать цвету виджета, на котором он находится:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);

Ответ 5

В то время как предыдущие ответы могут устанавливать цвет фона для не редактируемого QComboBox, они не работают для редактируемого QComboBox. В этом случае вам нужно получить виджет QLineEdit, используемый для редактирования, и reset его фон.

Вот как я получил его для работы:

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

Ответ 6

Создайте палитру, которая будет синей, независимо от того, какой фактический виджет:

comboBox->setPalette( QPalette( Qt::blue ) );

Ответ 7

Я бы попробовал что-то вроде

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);

Ответ 8

comboBox->setPalette( QPalette( Qt::blue ) );

Прекрасно работает для меня!

Ответ 9

Никакие ранее ответы не помогли мне, но я сделал смесь всех ответов и наконец работал над Qt 5.12:

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);