2014-06-27 8 views
9

Sto provando a disegnare una casella combinata in QT5. Sto usando QT Creator per il layout e il caricamento di un foglio di stile a livello di app all'avvio.QComboBox colore del testo non cambierà con il foglio di stile

Il css ho raccontato alla mia casella combinata è la seguente:

QComboBox 
{ 
    color:white; 
    background-color: qlineargradient(x1:0, y1:0, x2:1,y2:1, stop: 1 rgba(228, 41, 81, 100), stop: 0 rgba(234, 107, 101, 100)); 
    border-color: rgba(255,255,255,200); 
    border-width: 1px; 
    border-style: solid; 
} 

QComboBox QListView 
{ 
    border-style: none; 
    background-color: qlineargradient(x1:0, y1:0, x2:1,y2:0, stop: 1 rgba(228, 41, 81, 100), stop: 0 rgba(234, 107, 101, 100)); 
} 

QComboBox::drop-down 
{ 
    width: 20px; 
    border: 1px; 
    border-color:white; 
    border-left-style:solid; 
    border-top-style: none; 
    border-bottom-style: none; 
    border-right-style: none; 
} 

QComboBox::down-arrow 
{ 
    image: url(:/ArrowImages/images/whitearrowdown16.png); 
    width: 16px; 
    height: 16px; 
} 

Ma il colore del testo nelle remainds casella combinata come il colore (nero) di default. Il colore nel menu a discesa è bianco. Il colore e lo stile del bordo funzionano tutti correttamente. L'etichetta sulla casella combinata è una specie di sottocontrollo che devo applicare separatamente? O mi manca qualcos'altro?

Grazie.

Edit:

screenshot aggiunto per chiarezza

Combobox style

Drop down style

Edit 2: Sembra che questo si verifica solo quando la casella combinata è impostato per non essere modificabile (che è il comportamento corretto per il mio programma, quindi non mi aiuta veramente.) Quando la casella combinata è impostata su modificabile, obbedisce agli stili correttamente. Ho provato ad aggiungere

QCombobox:!editable 
{ 
    color:white; 
} 

ma non risolve il problema.

+0

Se si caricano fogli di stile da un file, è possibile che in seguito sia stato caricato un altro foglio di stile nell'applicazione che sovrascrive quello stile specifico? Potresti provare a utilizzare 'QComboBox # YOUR_SPECIFIC_COMBO_BOX_NAME {color: white; } ' – TWE

risposta

12

Solo risolto. Sembra che l'impostazione della proprietà padding (con qualsiasi valore) sulla casella combinata nel foglio di stile faccia in modo che obbedisca correttamente allo stile dei colori. Sto assumendo che si tratti di una sorta di bug che potrebbe sorgere solo su alcuni set up, ma se qualcun altro ha lo stesso problema, il seguente codice funzionerebbe (se confrontato con quello nella domanda originale):

QComboBox 
{ 
    color:white; 
    background-color: qlineargradient(x1:0, y1:0, x2:1,y2:1, stop: 1 rgba(228, 41, 81, 100), stop: 0 rgba(234, 107, 101, 100)); 
    border-color: rgba(255,255,255,200); 
    border-width: 1px; 
    border-style: solid; 
    padding: 1px 0px 1px 3px; /*This makes text colour work*/ 
} 
+0

Questo problema mi dava fastidio per le ultime due ore ... IMBOTTITURA? Wow, ti ringrazio per aver risolto questo! Ma mi chiedo perché? Che tipo di bug causerebbe questo? – SilverWolfe

+1

fantastico. ottimo lavoro a capire questo fuori. Ho avuto lo stesso problema. – Rachael

1

La vista "dentro" è una QListView.

QListView 
{ 
    color: white; 
} 

dovrebbe fare il trucco.

+0

Siamo spiacenti, è la casella combinata effettiva stessa, non il menu a discesa, che non accetta la modifica al colore. Gli stili a discesa correttamente (anche se si utilizza il colore dalla sezione QComboBox, piuttosto che il proprio.) Tuttavia nel mio caso questo non è un problema.) – Sam

+0

Intendi l'elemento corrente? Per l'articolo corrente il tuo codice (prima parte) è perfettamente a posto ('QComboBox {color: white;}'). Hai provato a eliminare tutto il codice del foglio di stile oltre al tag del colore? – OnWhenReady

+0

Ho aggiunto alcuni screenshot alla domanda originale per chiarezza. Ho provato a creare un foglio di stile completamente vuoto con solo il foglio di stile della casella combinata con il colore, e influenza ancora solo il menu a discesa. – Sam

Problemi correlati