¿Cómo configuro el color de fondo de un widget como combobox o cuadro de doble giro?
Pregunta
Estoy tratando de establecer el color de fondo para un cuadro de doble giro, y no estoy seguro de qué función debo usar.
Vi una función llamada SetBackgroundRole
que acepta un Qt :: ColorRole
, pero no estoy seguro de cómo usar esta también.
Por favor, avíseme, ¿cuál es la forma más sencilla de cambiar el color de fondo de un QComboBox
o QDoubleSpinBox
?
Solución
QPalette
para todos los estilos, ya que los autores de estilos están restringidos por las directrices de las diferentes plataformas y por el motor de temas nativos.
Para asegurarse de que el color de fondo sea correcto, sugeriría usar el Estilo Qt Hoja . Esto es lo que hice para cambiar el color de fondo de un QComboBox
:
myComboBox- > setStyleSheet (" QComboBox {background-color: blue;} ");
No he intentado específicamente para un QSpinBox
, ¡pero supongo que funcionará igual!
Otros consejos
En general, es correcto, pero no tiene en cuenta los widgets (como cuadros de giro y botones / cuadros combinados) que usan un rol de fondo diferente en la paleta. Una solución más general sería algo como esto:
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
Como alternativa, puede consultar las descripciones de los distintos roles de la paleta y descubrir cuál desea, luego aplicarla al widget que contiene las otras que desea cambiar. Los cambios en la paleta deben propagarse a los widgets secundarios.
En realidad, si observa los documentos de Qt para QPalette en el caso de un QComboBox, el rol de fondo probablemente no sea el que desea. Lo que quieres es:
QPalette :: Base Se usa principalmente como color de fondo para los widgets de ingreso de texto, pero también se puede usar para otras pinturas, como el fondo de las listas desplegables del cuadro combinado y los controles de la barra de herramientas. Generalmente es blanco u otro color claro.
Aquí está el código que estoy usando para establecer el color de fondo de un cuadro combinado que estoy usando para que coincida con el color del widget en el que está:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
Aparentemente, en Qt 4.1 y en adelante, debe configurar this- > setAutoFillBackground (true);
para que la paleta aplique el color de fondo.
Si bien las respuestas anteriores pueden establecer el color de fondo para un QComboBox
no editable, no funcionan para un QComboBox
editable. Para ese caso, debe derivar el widget QLineEdit
utilizado para la edición y restablecer su fondo.
Aquí es cómo lo hice funcionar:
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);
Construya una paleta que sea azul sin importar cuál sea el widget real:
comboBox->setPalette( QPalette( Qt::blue ) );
Probaría algo como
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );
Funciona bien para mí!
Las respuestas anteriores no me funcionaron, pero hice una combinación de todas las respuestas y finalmente trabajé en Qt 5.12 :
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);