Come posso impostare il colore di sfondo di un widget come una casella combinata o una casella di selezione doppia?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Sto cercando di impostare il colore di sfondo per una casella di selezione doppia e non sono sicuro di quale funzione dovrei usare.

Ho visto una funzione chiamata SetBackgroundRole che accetta un Qt :: ColorRole , ma non sono sicuro di come usare anche questo.

Fammi sapere, qual è il modo semplice per cambiare il colore di sfondo di un QComboBox o QDoubleSpinBox ?

È stato utile?

Soluzione

L'uso di un QPalette non è garantito per tutti gli stili, perché gli autori di stile sono limitati dalle linee guida delle diverse piattaforme e dal motore dei temi nativi.

Per essere sicuro che il colore dello sfondo sia corretto, suggerirei di utilizzare lo Qt Style foglio . Ecco cosa ho fatto per cambiare il colore di sfondo di un QComboBox :

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

Non ho provato specificamente per un QSpinBox , ma credo che funzionerà allo stesso modo!

Altri suggerimenti

è generalmente corretto, ma non tiene conto dei widget (come caselle di selezione e pulsanti / caselle combinate) che utilizzano un ruolo di sfondo diverso nella palette. Una soluzione più generale sarebbe qualcosa del genere:

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

In alternativa, è possibile esaminare le descrizioni dei vari ruoli della palette e capire quello che si desidera, quindi applicarlo al widget contenente gli altri che si desidera modificare. Le modifiche alla tavolozza dovrebbero propagarsi ai widget secondari.

In realtà, se si guardano i documenti Qt per QPalette nel caso di un QComboBox, il ruolo in background probabilmente non è quello che si desidera. Quello che vuoi è:

  

QPalette :: Base Utilizzato principalmente come colore di sfondo per i widget di immissione testo, ma può essere utilizzato anche per altri disegni, come lo sfondo degli elenchi a discesa della casella combinata e le maniglie della barra degli strumenti. Di solito è bianco o un altro colore chiaro.

Quindi ecco il codice che sto usando per impostare il colore di sfondo di una casella combinata che sto usando per abbinare il colore del widget su cui si trova:

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

Apparentemente in Qt 4.1 e versioni successive, devi impostare this- > setAutoFillBackground (true); affinché la tavolozza applichi il colore di sfondo.

Sebbene le risposte precedenti possano impostare il colore di sfondo per un QComboBox non modificabile, non funzionano per un QComboBox modificabile. In tal caso, è necessario derivare il widget QLineEdit utilizzato per la modifica e reimpostarne lo sfondo.

Ecco come l'ho fatto funzionare:

    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);

Costruisci una tavolozza blu indipendentemente dal widget reale:

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

Proverei qualcosa del genere

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );

Funziona bene per me!

Nessuna risposta precedente ha funzionato per me, ma ho creato un mix di tutte le risposte e alla fine ho lavorato su Qt 5.12 :

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top