¿Cómo configuro el color de fondo de un widget como combobox o cuadro de doble giro?

StackOverflow https://stackoverflow.com/questions/177778

  •  05-07-2019
  •  | 
  •  

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 ?

¿Fue útil?

Solución

No se garantiza que el uso de 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top