2015-04-28 9 views
6

Ho cercato di trovare un modo per modificare il valore predefinito dell'interlinea di riga del file di un font, utilizzando QFont, QFontMetrics o qualcosa del genere. Sto usando QPainter::drawText per disegnare del testo in un rettangolo di delimitazione.QNon consente di impostare l'interlinea o la direzione manualmente.

È strano che lo QFont consenta la modifica della crenatura dei caratteri e persino l'operazione di allungamento e la spaziatura delle lettere, ma nulla per modificare lo spazio predefinito tra le righe. Ho cercato e trovato alcune soluzioni parziali usando QTextLayout ma nessuno sembrava funzionare correttamente.

Ho bisogno di usare QPainter perché ho generato una trama con il testo da renderizzare con OpenGL.

Alla ricerca di ulteriori idee da provare!

UPDATE

ho trovato che posso usare per disegnare un QPainterQStaticText che permette di formattazione del testo HTML, simile a QTextDocument. Tuttavia, lo stile CSS non funziona come in QTextDocument (c'è un bug report) ... Quindi non c'è ancora un vantaggio, ma spero che questo mi metta sulla giusta strada.

risolto

ho ottenuto quello che volevo utilizzare QTextDocument, come Mykhaylo suggerito. Link to solution

risposta

3

QFontMetrics non è stato progettato in particolare per il testo su più righe.

Utilizzare QTextDocument. È possibile stampare con testo multi-linea e rich text anche usando QPainter. Vedere la soluzione su come use QPainter with QTextDocument

+0

Funziona come previsto. Mykhaylo davvero fantastico :). Grazie per l'aiuto! –

0

Sembra che non ci sia molto da fare qui.

QFontMetrics::lineSpacing restituisce ciò che è necessario ma è di sola lettura.

È la somma di altezza e direzione del carattere. Puoi regolare l'altezza - impostalo nel costruttore QFont. Ma non puoi impostare il comando.

Alcune persone aggiungono \n alla fine della stringa per aumentare lo spazio tra le righe ma ovviamente questa non è sempre una buona soluzione.

+0

Grazie per il rapido soccorritore @demonplus. Controllerò la documentazione di QFont e vedrò se ciò che hai suggerito risolve il mio problema. Pubblicherò i risultati :) –

+0

Non riesco a trovare alcun costruttore QFont che prende un parametro di altezza ... l'aggiunta di nuovi caratteri di linea farà pasticciare il wrap di parole, quindi neanche questa è una soluzione per me. Ma grazie ancora per il tuo tempo @demonplus;) –

+0

QFont :: QFont (const QString & family, int pointSize = -1, int weight = -1, bool italic = false) - quando cambi pointSize, l'altezza del font sarà cambia anche – demonplus

Problemi correlati