Ho circa 40 pulsanti che sono anche indicatori (On o Off) e una volta al secondo aggiorno il colore di questi indicatori a seconda dello stato. Lo faccio cambiando il foglio di stile. E 'finita kill per fare questo e in caso affermativo dovrei solo impostare un nuovo foglio di stile quando l'indicatore ha cambiato stato o dovrei usare qualcosa come QBrush?L'uso di styleSheets in modo dinamico aggiunge molto computo
risposta
Sì. Ho trovato che con Qt 4.6.2 su Linux, l'impostazione di un foglio di stile per cambiare il colore del testo su una QLabel è molto lento.
Il foglio di stile dinamico sembrava un'ottima soluzione, ma per me, lo setStyle()
necessario era altrettanto costoso di setStyleSheet()
!
Dopo molta sperimentazione, ho trovato almeno due volte più veloce, e di solito più di 50 volte più rapidi questa alternativa di essere:
QPalette palette = lbl->palette();
palette.setColor(QPalette::WindowText, Qt::gray);
lbl->setPalette(palette);
A seconda di come il vostro foglio di stile (statica) è impostato, è' d necessario sostituire QPalette::WindowText
con QPalette::Window
o QPalette::Button
. Vedere lo QPalette documentation per i dettagli.
è un concetto interessante. Sfortunatamente, loro menzionano esplicitamente che è solo per "scopi dimostrativi" e che "non dovrebbe essere usato per la produzione" (anche se l'ho usato :) –
bump. non mancare di rispetto alla risposta precedente :) –
@yanbellavance, hai un link in cui menzionano che è 'solo a scopo dimostrativo' e 'non dovrebbe essere usato in produzione? –
Non impostare in modo dinamico fogli di stile completi. Invece, definire un foglio di stile ampio dell'applicazione utilizzando il foglio di stile dinamico che si analizza una volta all'avvio dell'applicazione. Poi, nel foglio di stile, definire le proprietà del foglio di stile dinamiche, come specificato nel documentation:
Ci sono molte situazioni in cui dobbiamo presentare un modulo contenente campi obbligatori. Per indicare all'utente che il campo è obbligatorio, una soluzione efficace (anche se esteticamente discutibile) è quella di usare il giallo come colore di sfondo per quei campi. Risulta che questo è molto facile da implementare utilizzando fogli stile Qt. In primo luogo, vorremmo utilizzare il seguente foglio di stile a livello di applicazione:
*[mandatoryField="true"] { background-color: yellow }
Nel tuo caso, probabilmente si potrebbe fare qualcosa di simile:
QPushButton[state="on"] {
background-color: green;
}
QPushButton[state="off"] {
background-color: red;
}
quindi aggiornare il pulsante 'Stato' immobile:
pushButton->setProperty("state", "on");
pushButton->setStyle(QApplication::style());
Purtroppo, per Qt 4.6 è necessario forzare un ricalcolo del foglio di stile resettando lo stile del widget, da cui ilChiamata.
L'utilizzo di fogli di stile dinamici in questo modo è molto veloce. Sto lavorando su un'applicazione che fa un uso pesante delle proprietà del foglio di stile dinamico e non ho notato alcuna degredation delle prestazioni.
Grazie per l'ottima risposta. Quindi da Qt 4.6 dovrò chiamare pushButton-> setStyle (QApplication :: style()); ogni volta che cambio le proprietà per influenzare lo stile? Lo inserirò nel mio codice adesso per evitare problemi futuri. –
sei assolutamente sicuro che questo sarà il caso in Qt 4.6? –
Non sono riuscito a far funzionare il comportamento dinamico senza reimpostare lo stile. Vedi anche questa domanda: http: // StackOverflow.it/questions/1595476/are-qts-stylesheets-really-handling-dynamic-properties/1849127 # 1849127 Sei riuscito a ottenere il comportamento dinamico senza reimpostare lo stile del widget? Sto usando Qt sotto Linux, non sono sicuro che ciò faccia differenza. –
Nella mia esperienza, i fogli di stile consumano troppe risorse, meglio evitarli se possibile.
Cosa c'è di troppo? La frequenza di aggiornamento –
era una volta al secondo e il PC quad core su cui è in esecuzione la mia app era così fluido che funzionava allo 0% :) –
- 1. Utilizzo delle variabili in qt StyleSheets
- 2. : pseudoclass vuoto quando si aggiunge contenuto dinamico
- 3. Come si aggiunge il reindirizzamento per reagire in modo dinamico al router?
- 4. Corretta formattazione quando si aggiunge contenuto dinamico in jquery mobile
- 5. Cambia CSS in modo dinamico
- 6. Pulsante di rimozione Android in modo dinamico
- 7. Modifica di CreateParams in modo dinamico?
- 8. Aggiunta di righe della tabella in modo dinamico in Android
- 9. DbContext è molto lento quando si aggiunge e si elimina
- 10. Creare Json in modo dinamico in C#
- 11. Include JavaScript in modo dinamico e aspetta
- 12. Cambia visualizzazione contenitore in modo dinamico
- 13. Boto3: ottieni le credenziali in modo dinamico?
- 14. Come chiamare TryParse in modo dinamico?
- 15. Cambia l'indirizzo IP in modo dinamico?
- 16. ghc 7.4.2, in modo dinamico chiamando moduli
- 17. Cambia video sottotitoli in modo dinamico - HTML5
- 18. Come unire oggetti Java in modo dinamico
- 19. SQL dinamico che impiega molto più tempo dell'equivalente codificato
- 20. accumulo di matrice JSON in PHP in modo dinamico
- 21. Dichiarare un tipo di dati in modo dinamico in C++
- 22. Modifica l'altezza di UITableviewCell in modo dinamico in iPhone?
- 23. Creazione di classi in modo dinamico con Java
- 24. In che modo insertAdjacentHTML è molto più veloce di innerHTML?
- 25. NSArray che aggiunge elementi
- 26. Importa moduli in modo programmatico/dinamico in Julia
- 27. Creazione della casella di controllo in modo dinamico utilizzando JavaScript?
- 28. Come creare una serie di funzioni in modo dinamico?
- 29. Codice di debug compilato in modo dinamico con Roslyn
- 30. Configurazione & Generazione di BIRT report in modo dinamico
Non risponderebbe alla tua domanda se hai usato il monitor delle prestazioni O/S ('perfmon.exe' su Windows) per misurare la quantità di calcolo della CPU? – ChrisW