Domanda

Qualcuno ha esperienza con widget personalizzati in stile Qt? (Sto usando Qt 4.5)

I problemi si presentano così:

Voglio sviluppare alcuni controlli personalizzati che non sono interamente basati su primitive e sottocontrolli di disegno esistenti. Poiché l'intera applicazione dovrebbe essere personalizzabile, voglio fare affidamento su stili personalizzati, possibili anche su fogli di stile.

Quello che devo configurare per questi nuovi controlli sono i seguenti:

  • metriche aggiuntive
  • voci di palette aggiuntive
  • opzioni di stile aggiuntive

Scavando su Internet e documentazione, ho scoperto che devo derivare una nuova classe di stile da una delle sottoclassi QStyle e sovrascrivere il metodo polacco per aggiungere nuove voci di palette e drawControl (e gli altri metodi di disegno) per la logica di pittura per il controllo personalizzato e le parti personalizzate.

Ho due problemi che mi danno fastidio:

  1. Attualmente ci sono diverse classi di stile per stili diversi, già implementate in Qt. (ad es. QMotifStyle , QWindowsStyle ), ognuno con impostazioni diverse. Attraverso l'ereditarietà, avrei bisogno di reimplementare la pittura e la logica di installazione aggiuntiva per ogni stile, al fine di integrarmi correttamente in tutti questi stili. Ho un'altra alternativa?

  2. Sono ancora confuso su come utilizzare i fogli di stile con questi stili personalizzati. Qualcuno può indicare un luogo in cui posso trovare più informazioni rispetto a quello fornito dalla documentazione di Qt? (I campioni in Qt non mi aiutano molto).

È stato utile?

Soluzione

Il problema del foglio di stile non verrà risolto, in quanto non lo sarà nelle classi personalizzate.

Le chicche extra aggiunte ad uno stile personalizzato non saranno comprese e curate da classi già esistenti. Questo perché C ++ è un linguaggio statico e non esiste un modo (pulito e sano di mente) per correggere le patch delle classi di runtime. Una potenziale soluzione consiste nell'utilizzare uno stile proxy che racchiuda una determinata istanza di sottoclassi QStyle standard. A seconda di quanto vuoi ottenere, puoi fare riferimento a due articoli: Codice e stili multipiattaforma e Look 'n' Feel Q & amp; Un .

Se fossi in te, non andrei con l'approccio QStyle. Dopotutto, crei widget personalizzati (ad esempio FooSomething) in modo da poter aggiungere anche creare stili personalizzati completamente diversi (ad esempio FooStyle), non è nemmeno necessario imitare QStyle. Ovviamente, dovrai comunque replicare funzionalità simili, ad es. per supportare il foglio di stile.

Altri suggerimenti

  1. Un'alternativa potrebbe essere l'uso di QPalette per ottenere i colori corretti e QStyle per ottenere la spaziatura corretta.

  2. QStyle documentazione per Qt 4.5:

      

    Avviso: i fogli di stile Qt sono attualmente   non supportato per le sottoclassi QStyle personalizzate.   Prevediamo di risolverlo in una versione futura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top