qt - guia - qgis manual
¿Cómo configuro el color de fondo de un widget como combobox o double spin box? (8)
Aparentemente en Qt 4.1 en adelante, necesita establecer this->setAutoFillBackground( true );
para que la paleta aplique el color de fondo.
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, hágamelo saber, ¿cuál es la forma más sencilla de cambiar el color de fondo de un QComboBox
o QDoubleSpinBox
?
Construya una paleta que sea azul sin importar el widget real:
comboBox->setPalette( QPalette( Qt::blue ) );
En general, es correcto, pero no tiene en cuenta los widgets (como los cuadros de giro y los botones / cuadros combinados) que usan una función 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);
De forma alternativa, podría examinar las descripciones de los diversos roles de paleta y descubrir cuál es el que desea, luego aplicarlo al widget que contiene los otros que desea cambiar. Los cambios en la paleta deberían propagarse a los widgets de los niños.
En realidad, si mira los documentos de Qt para QPalette en el caso de un QComboBox, la función de fondo probablemente no sea la que desea. Lo que quieres es:
QPalette :: Base Se usa principalmente como el color de fondo para los widgets de entrada de texto, pero también se puede usar para otra pintura, como el fondo de las listas desplegables de los combobox y los controles de la barra de herramientas. Por lo general es blanco u otro color claro.
Así que 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 se encuentra:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
Intentaría algo como
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
No se garantiza que usar QPalette
funcione para todos los estilos, porque los autores de estilos están restringidos por las directrices de las diferentes plataformas y por el motor de temas nativo.
Para asegurarse de que su color de fondo sea correcto, le sugiero que use la Hoja de Estilo de Qt . Esto es lo que hice para cambiar el color de fondo de un QComboBox
:
myComboBox->setStyleSheet("QComboBox { background-color: blue; }");
No he probado específicamente un QSpinBox
, pero creo que funcionará igual.
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.
Así es como 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);
comboBox->setPalette( QPalette( Qt::blue ) );
¡Funciona bien para mí!