¿Cómo puedo configurar el color de fondo de un aparato como combobox o giro del doble caja?

Estoy tratando de establecer el color de fondo para un doble cuadro de número, y no estoy seguro de cuál es la función que debo usar.

Vi algo de la función llamada SetBackgroundRole que acepta un Qt::ColorRole, pero no estoy seguro de cómo utilizar este así.

Por favor, hágamelo saber, ¿cuál es la forma más sencilla de cambiar el color de fondo de un QComboBox o QDoubleSpinBox?

InformationsquelleAutor AMM | 2008-10-07

9 Kommentare

  1. 37

    El uso de un QPalette no se garantiza que funcione para todos los estilos, ya que el estilo de los autores están restringidos por las diferentes directrices de las plataformas y por los nativos tema del motor.

    Para asegurarse de que su color de fondo será la correcta, me gustaría sugerir el uso de la Qt Hoja De Estilo. Aquí es lo que yo hice para cambiar el color de fondo de un QComboBox:

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

    No he específicamente se trató de un QSpinBox, pero creo que se va a trabajar de la misma !

    • Utilizando una hoja de estilos para establecer el color de fondo no es el enfoque correcto, a menos que usted está dispuesto a también el estilo de los otros sub-controles en el QComboBox (es decir, de la gota-abajo y abajo-flecha). Ver la nota de la documentación de Qt: «Con complejo de widgets, tales como QComboBox y QScrollBar, si una propiedad o sub-control personalizado, todas las demás propiedades o sub-controles deben ser personalizados así.» Link: doc.trolltech.com/4.5/stylesheet-customizing.html
    • puedo obtener bordes blancos en la parte superior y la inferior, donde los bordes redondeados son en mac
  2. 42

    fhe es en general correcta, pero no tiene en cuenta los widgets (como cuadros numéricos y los botones/comboboxes) que el uso de un fondo diferente papel 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);

    Alternativamente, usted podría mirar en la descripción de los diversos paleta de funciones y averiguar el que usted desea, a continuación, aplicar el widget que contiene a los demás que desee cambiar. Los cambios en la paleta debe propagar a los hijos de los widgets.

  3. 12

    De hecho, si se mira el Qt docs para QPalette en el caso de un QComboBox el fondo de papel no es probablemente lo que usted desea. Lo que quiero es:

    QPalette::Base que se Utiliza principalmente como el color de fondo para la entrada de texto de los widgets, pero también puede ser utilizado para otros de la pintura, tales como el fondo de combobox listas desplegables de la barra de herramientas y mangos. Es generalmente de color blanco o de otro color de la luz.

    Así que aquí está el código que estoy utilizando para establecer el color de fondo de un cuadro combinado estoy usando para que coincida con el color del widget es en:

    QPalette pal = myComboBox->palette();
    pal.setColor(QPalette::Base, pal.color(QPalette::Window));
    myComboBox->setPalette(pal);
  4. 11

    Al parecer en Qt 4.1 en adelante, es necesario establecer this->setAutoFillBackground( true ); de la paleta para aplicar el color de fondo.

    • este debe ser un comentario
  5. 4

    Mientras que las respuestas anteriores puede establecer el color de fondo para un no-editable QComboBox, que no trabajan para un editable QComboBox. Para ese caso, usted necesita para obtener el QLineEdit widget utilizado para la edición y restablecer su fondo.

    Esto es lo que yo tengo que trabajar:

        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. 1

    No había respuestas trabajado para mí, pero he hecho una mezcla 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);
    • Bonita respuesta! Otro fresco, y más sutil, resaltar el efecto es el uso de QPalette::Background en lugar de QPalette::Base, pero con colores oscuros como el magenta o verde.
  7. 0

    Me gustaría probar algo como

    QPalette pal = widget.palette();
    pal.setColor(QPalette::Window, Qt::blue);
    widget.setPalette(pal);
    • He intentado hacer esto, pero de alguna manera el color de fondo no se está actualizando. Alguna idea de lo que podría ser la razón. ¿Hay algo más que había asumido..
    • Lo que quiero decir es que debo ser la invocación de algo así como una actualización o algo después de hacer el setPalette
    • No tengo QT a prueba aquí, pero QWidget::update() debe forzar la actualización. Has probado a Jérôme la solución?
    • QPalette::Window no es el backgroundRole() de QComboBox, por lo que este código no hace nada para un QComboBox.
  8. 0
    comboBox->setPalette( QPalette( Qt::blue ) );

    Funciona muy bien para mí!

    • He probado este, pero la mía sólo funciona si el QSpinBox está desactivado (es decir, si el QSpinBox es enaled, el color de vuelta a la normalidad). Alguna idea?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea