Как установить цвет фона виджета, например, combobox или double spin box?
Я пытаюсь установить цвет фона для окна двойного вращения, и я не уверен, какую функцию я должен использовать.
Я видел некоторую функцию под названием SetBackgroundRole
, которая принимает Qt::ColorRole
, но я не уверен, как ее использовать.
Пожалуйста, дайте мне знать, какой простой способ изменить цвет фона QComboBox
или QDoubleSpinBox
?
Ответы
Ответ 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);