2011-01-21 11 views
6

Volevo consultare i saggi qui riguardo a Qt e skinning, ottenere la tua opinione e tracciare un percorso per il mio sviluppo. I miei requisiti sono i seguenti:Qt e UI Skinning

  1. mio Qt/C++ applicazione (cross-platform con le versioni Mac, Windows e Linux) deve avere le pelli modulari.

  2. Uno skin è definito come un insieme di uno o più elementi: - Struttura dello sfondo della finestra - Aspetto dei controlli dell'interfaccia utente come caselle di modifica, menu a discesa, pulsanti di opzione, pulsanti, ecc. - Aspetto della finestra " didascalia ", grip di ridimensionamento, ecc.

  3. Le skin verranno installate con il programma di installazione dell'applicazione, consentendo all'utente di scegliere quale desidera utilizzare. Gli utenti dovrebbero essere in grado di cambiare le pelli al volo.

Posso andare al percorso QML? dovrebbe essere personalizzato e basato su risorse semplici integrate nell'applicazione? Ogni consiglio di design sarà apprezzato.

Grazie.

risposta

7

Se ho capito bene, allora il foglio di stile è la miglior soluzione. È possibile creare fogli di stile simili ai CSS e quindi passarli come opzione della riga di comando alla propria applicazione o caricare sul richiamo per creare lo stile dell'applicazione in fase di esecuzione. In questo modo è possibile creare più fogli di stile ciascuno con un aspetto diverso e consentire all'utente di caricarli a piacimento. Dal suo CSS non ha bisogno di nuovi apprendimenti e puoi mantenere tutto lo stile al di fuori del tuo codice sorgente.

Ecco un elenco di risorse che si possono ottenere rapidamente operativi:

http://labs.qt.nokia.com/2007/11/27/theming-qt-for-fun-and-profit/

http://doc.qt.nokia.com/latest/stylesheet.html

+0

Esiste un modo per un foglio di stile da "compilare" con l'applicazione e non essere presente su un file all'interno della cartella di installazione? Voglio dire, mi piacerebbe che il foglio di stile predefinito fosse a prova di manomissione, mentre l'utente dovrebbe avere la possibilità di crearne uno suo. – JasonGenX

+0

È possibile compilare in uno o più fogli di stile con l'applicazione. Dai un'occhiata al sistema di risorse di Qt, che dovrebbe farlo. –

+0

E non ho idea di PERCHÉ lo stile predefinito dovrebbe essere a prova di manomissione? In effetti, lo stile predefinito è un ottimo esempio di come è possibile eseguire lo styling della tua applicazione, dato che puoi saltare l'intera documentazione skinning. Fornisco anche i miei file UI come riferimento. –

0

Non ho ancora giocato con QML, ma è anche possibile creare un'implementazione personalizzata QStyle che supporti il ​​formato della risorsa. Si noti che si perderebbe il supporto del foglio di stile se si fosse passati a questa rotta.

Cambiare le didascalie delle finestre è un po 'più complicato se si desidera la portabilità.

+0

Può QStyle dettare per esempio una nuova immagine di sfondo per una finestra (Widget)? o un nuovo grip di ridimensionamento cerca una finestra? – JasonGenX

+0

Probabilmente al primo, ma è anche possibile utilizzare un gestore di paint personalizzato nell'implementazione di QMainWindow. Sicuramente sì al secondo. – ChrisV

0

QML, IIUC, in realtà non scuoiare i widget, si occupa principalmente di grafica impaginazione ecc ecc

QStyle è usato per cambiare l'aspetto. È un po 'di basso livello e richiede la programmazione, quindi se vuoi caricare diversi skin creati dall'utente (da un XML o giù di lì) potrebbe essere complicato supportare un vasto skinning. Tuttavia, concatenare colori e alcuni oggetti è abbastanza facile. (Potrebbe esserci qualcun altro che ha fatto qualcosa che è possibile riutilizzare .. non è sicuro.)

Per modificare i widget, utilizzare QStyle::polish(). Puoi usarlo per cambiare l'immagine di sfondo (se si tratta di una finestra di livello superiore o di una certa classe). Esistono numerosi metodi di ripetizione per cambiare quasi ogni parte di ogni widget.

Memorizza/carica lo stile utilizzando QSettings, leggendo e impostando lo stile desiderato subito dopo QApplication ma prima che venga creata la finestra principale.