2013-06-27 11 views
5

Sono relativamente nuovo al metodo di fogli di stile di Qt e sto cercando di regolare la spaziatura tra l'icona e il testo su un QPushButton.Come modificare l'icona/spaziatura del testo di QPushButton con i fogli di stile?

Questo è il divario mi riferisco a: http://imageshack.us/scaled/thumb/593/4kem.png (StackOverflow non mi permette di post ancora foto)

QPushButton { 
    qproperty-icon: theme_url("/button_action/add"); 
    qproperty-iconSize: 14px; 
} 

Esiste un parametro che posso usare per regolare questo spazio? Ho provato margin, padding, spacing? Forse c'è un selettore diverso che posso usare per afferrare l'icona?

+1

Non ho visto nulla di utile nei fogli di stile, forse puoi semplicemente usare gli spazi bianchi nel testo del pulsante? ;) – ariwez

+1

Ci sono molti pulsanti nel sistema quindi speravo di avere una risposta unica anziché doverli modificare tutti manualmente ... – hannahd

+0

È possibile modificare l'icona per essere più ampia per tenere conto del divario? Per quanto ne so, non esiste una tale proprietà di fogli di stile. Potresti semplicemente non impostare affatto il testo e l'icona sul pulsante, ma invece impostare un layout sul pulsante e inserire 2 etichette, 1 per l'icona, una per il testo – cppguy

risposta

0

In realtà con QPushButton sei sfortunato. È possibile trovare un elenco completo delle opzioni di lavoro per i pulsanti di stile nello qt documentation (presumo che si utilizzi qt5, ma è disponibile anche per altre versioni).

Quello che è spesso consigliato se si desidera un maggiore controllo dell'icona è quello di scambiare i tuoi QPushButton con QToolButtons che sono esattamente gli stessi eccetto che hanno caratteristiche extra per renderli compatibili con le barre degli strumenti -e- hanno più opzioni per il posizionamento delle icone . Ma questo potrebbe non funzionare per te perché as you can see sono stilizzati esattamente come QPushButtons. Ma guarda nel parametro "toolButtonStyle" che ti permette di spostare l'icona.

Avanti sulla lista viene cambiata la grafica. Se tutto ciò che vuoi è più spazio, aggiungi semplicemente i pixel extra vuoti all'opera. Ciò ferisce davvero la mente del perfezionista ma è efficace.

Successivamente nell'elenco viene fornita la sottoclasse di QPushButton e si esegue l'override della vernice. Sembra più scoraggiante di quello che è. La sottoclasse in Qt è già un'abitudine e funziona alla grande. Ecco un tutorial i googled in un jiffie (per 4.8 ma dovrebbe essere circa lo stesso per 5) in materia di sottoclassi. Copre persino l'evento pittorico.

Spero che questo sia stato utile.

0

Almeno con Qt5.5 (questo potrebbe cambiare in futuro, spero), oltre a scavalcare l'evento paint, che è complesso e secondo me disordinato solo per una cosa semplice, non c'è un modo per spostarsi in quel modo icona pochi pixel qua o là (piccole regolazioni). Se rimuovi l'icona e utilizzi un foglio di stile per impostare l'icona background nell'URL della risorsa, puoi utilizzare la proprietà background-position nel foglio di stile, ma purtroppo accetta solo parole come center, left, ecc., Non le regolazioni dei pixel.

Ecco come ho risolto questo problema. Ho creato PNG trasparenti che erano leggermente più grandi del necessario, in cui avevo un margine di 4 pixel attorno all'icona stessa all'interno del PNG. Quindi ho spostato l'icona all'interno di quella tela e l'ho ricaricata nel file delle risorse del progetto, quindi l'ho mappata di nuovo con la proprietà dell'icona nella finestra di progettazione per QPushButton e ha funzionato. Ora ho icone allineate correttamente a sinistra con il testo accanto. Posso anche allargare il divario tra icona e testo.

0

Il modo più semplice per farlo è quello di creare la propria classe ereditata da QPushButton e sovrascrivere PaintEvent e quindi posizionare manualmente la pixmap dell'icona dove si desidera.

0

Come di Qt5.7 non so di qualsiasi funzionalità built-in per la spaziatura icona/testo. Quello che faccio di solito è dare all'immagine un po 'più di spazio a destra e impostare le dimensioni dell'icona del pulsante di conseguenza.

Soluzione:

  1. ridimensionare il file di icona a 32 * 16 px ma lasciare il suo contenuto come è.
  2. Chiama setIconSize (QSize (32, 16)) sul tuo pulsante.

Risultato: ora ci sono 16 pixel di spazio vuoto tra l'icona e il testo. 32 pixel è solo il mio esempio, puoi ovviamente impostare la dimensione aggiuntiva su qualcosa che rispecchia il tuo stile.

Se si desidera applicarlo su tutti gli elementi del pulsante, creare semplicemente una sottoclasse minuscola che lo faccia automaticamente nel costruttore. Non c'è davvero bisogno di scavalcare il metodo paintEvent per questo.