2008-10-07 1 views
30

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

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

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

ответ

35

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

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

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

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

0

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

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

Я попытался сделать это, но почему-то цвет фона не получает обновления. Любая идея, что может быть причиной. Есть ли что-нибудь еще, что вы предположили .. – AMM 2008-10-07 10:28:11

+0

Что я имею в виду, должен ли я ссылаться на что-то вроде перерисовки или чего-либо после выполнения setPalette – AMM 2008-10-07 10:33:22

+0

У меня нет QT для тестирования здесь, но QWidget :: update() должен принудительно перерисовать. Вы пробовали решение Жерома? – fhe 2008-10-08 08:55:11

40

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

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

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

1

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

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

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

10

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

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

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

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

прекрасно работает меня!

3

Хотя предыдущие ответы могут устанавливать цвет фона для нередактируемого 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); 
Смежные вопросы