2015-08-19 13 views
5

C'è un modo per cambiare il colore di sfondo del widget senza perdere lo stile? Il mio problema è riproducibile su Windows 7/Vista con tema Aero e anche su Windows 8. Si può vedere come appare in Qt Designer:Come mantenere il tema Windows Aero dopo aver impostato il colore di sfondo del pulsante in Qt?

Background colour is the only difference between top and bottom buttons

Qui abbiamo quattro pulsanti: entrambi i widget top sembra buono (come tutti gli altri widget di questo programma), ma entrambi i widget in basso sembra vecchio. L'unico motivo di questo vecchio stile è l'impostazione del colore di sfondo di questi pulsanti (per quanto ho capito, Desktop Window Manager reimposta lo stile su vecchio se il widget non è standard).

Quindi, c'è un modo per forzare Desktop Window Manager a disegnare un pulsante con un colore di sfondo non standard? (Microsoft Office può farlo, ma non sono sicuro che sia una funzione standard)

Potrebbe consigliare l'estensione Qt che sostituisce il disegno standard dei pulsanti con il moderno (tema Aero)? O potresti conoscere un modo più standard per farlo?

Ho trovato un solo modo per cambiare colore senza perdere stile: per mettere il widget parzialmente trasparente sopra il pulsante (e per renderlo trasparente per i clic del mouse). Potete vedere il risultato qui (il mio telaio è più grande di quello che è necessario, - è per la dimostrazione, anche ho bisogno di correzione del colore per compensare la trasparenza, ma non è critico):

Workaround (semi-transparent frame is above buttons)

Funziona, ma Non mi piace questa "soluzione". Hai un'idea migliore?

+1

Purtroppo, [Windows non supporta in modo nativo che] (http://stackoverflow.com/q/18745447/1329652), in modo da qualunque soluzione che si presenti con deve essere il vostro. Il meglio che puoi fare è disegnare il pulsante su un'immagine/pixmap, quindi colorarlo come desideri. –

risposta

1

Quindi, esiste un modo per forzare Desktop Window Manager a disegnare il pulsante con un colore di sfondo non standard? (Microsoft Office può farlo, ma io non sono sicuro che è caratteristica standard)

Si può scrivere il proprio QProxyStyle e utilizzare le funzioni WinAPI per disegnare pulsanti con stile aerodinamico e il colore di sfondo personalizzato. Puoi guardare le fonti Qt per vedere, come è fatto per l'aereo. Ma è un compito molto complesso.

I fogli di stile non sono progettati per essere utilizzati con animazioni (come l'animazione al passaggio del mouse in aereo).

Si consiglia l'estensione Qt che sostituisce il disegno standard dei pulsanti con il moderno (tema Aero)? O potresti conoscere il modo più standard per farlo?

Non esiste un modo standard. Se si desidera utilizzare i fogli di stile senza problemi imprevedibili, è necessario utilizzare lo stile "Fusion" anziché gli stili nativi. Lo stile "Fusion" è una buona base per la personalizzazione QSS. See documentation

Altra possibilità: utilizzare QtQuick anziché i widget.

+0

Grazie per queste idee e link! Sfortunatamente lo stile "Fusion" e il tema Aero in Windows sono diversi. Potresti per favore chiarire come 'QtQuick' può aiutarti qui? – Ilya

+0

'QtQuick' è una nuova parte del framework Qt creata per il moderno sviluppo dell'interfaccia grafica multipiattaforma. Si può leggere la documentazione e i campioni Qt. –

2

Vedo che si stanno usando fogli di stile per modificare il colore di sfondo dei pulsanti. Ho affrontato lo stesso problema qualche tempo fa. Non appena applichi un foglio di stile, il pulsante perde il 3 ° effetto e non vedi anche l'effetto hover. L'idea era di scartare usando i fogli di stile e usare QPalette per impostare i colori.Ad esempio,

QPalette bluePalette(button->palette()); // original palette 
bluePalette.setColor(QPalette::Button, QColor(Qt::blue)); //colour you want 
button->setPalette(bluePalette); 
+1

Grazie per questa idea! Sfortunatamente lo stile Aero è "più potente" di "setPalette()". Ho già verificato quest'idea in precedenza: nel tema Classic abbiamo il pulsante blu, ma nel tema Aero possiamo vedere solo il pulsante con il colore di sfondo predefinito. Sembra che Desktop Window Manager ignori semplicemente la tavolozza del widget. – Ilya

Problemi correlati