2013-02-15 10 views
9

Ho un font che ha diversi pesi di font all'interno di una famiglia (extra light, light, regular, semibold, bold, black). Per questo esempio, sto utilizzando il sorgente gratuito di Google Webfont Source Sans Pro, ma ho riscontrato lo stesso problema con qualsiasi font con più pesi (ad esempio Avenir Next, un font di sistema in Mac OS 10.8). In un foglio di stile Qt, se si specifica:È possibile specificare più di una semplice versione "normale" e "grassetto" di un carattere in un foglio di stile Qt?

QLabel 
{ 
    font-family: Source Sans Pro; 
    font-size: 24px; 
} 

Ottengo lo stile "Normale" del carattere. Se si specifica:

QLabel 
{ 
    font-family: Source Sans Pro; 
    font-weight: bold; 
    font-size: 24px; 
} 

Ottengo la versione in grassetto del carattere. Non riesco a capire nessuna combinazione che mi darà qualcosa di diverso da normale o grassetto. Ho provato a mettere il peso direttamente nella famiglia di font (ad esempio, font-family: Source Sans Pro Light;), ho provato ad usare Light, Semibold, ecc. Nello strumento font weight: ho anche provato ad usare gli equivalenti numerici (Qt documentation dice che dovrebbero essere valori da 0 a 99 invece della numerazione CSS x00). Niente funziona.

EDIT: Ho appena provato a scrivere un programma rapido per inserire numeri da 0 a 999 per la proprietà di tipo font. È interessante notare che sono stato in grado di ottenere "luce" se inserivo qualcosa tra 0 e 399. Dal 400 al 407 mi ha dato "Regolare", dal 408 al 599 mi ha dato di nuovo la luce, quindi 600 o più mi hanno dato semibold. Questo sembra davvero strano, perché ora usando i numeri posso almeno accedere a "luce" e "semibold". Non riesco ancora a trovare alcun modo per ottenere i pesi "Extra Light" o "Black".

La mia unica domanda è, è semplicemente impossibile senza ricorrere al codice personalizzato? Posso ottenere il carattere esatto che voglio con la creazione di un QFont come segue:

QFontDatabase db; 
QFont = db.font("Source Sans Pro", "Semibold", 24); 

Ma, ovviamente, questo significa che non posso utilizzare i fogli di stile (o peggio, devo scrivere il mio parser foglio di stile o avvolgere quella Qt esistente o qualcosa). Sembra un po 'difficile credere che ciò non sia possibile con i fogli di stile. I font multi-peso sono poco supportati in Qt?

risposta

7

Infine, ho trollato attraverso la sorgente Qt e penso di aver trovato la risposta. In breve, no, non è possibile. O almeno, dipende dal tipo di carattere e forse anche dalla piattaforma (sto lavorando su Mac OS X con Qt 4.8.4).

QI caratteri hanno entrambi i caratteri "pesi" (impostati da QFont :: setWeight()), che è un numero compreso tra 0 e 99. Hanno anche un "Nome stile" che è impostato da QFont :: setStyleName(). Puoi impostare il peso usando il font weight in un foglio di stile, ma non puoi impostare lo styleName (ho confermato guardando la fonte di qcssparser). C'è un parametro in stile font, ma può essere usato solo per impostare normale, italico o obliquo ... cioè, chiama QFont :: setStyle(), non setStyleName().

Almeno nel mio caso, l'unico modo per accedere a determinati pesi del font è il "Nome stile", dandogli una stringa specifica come "Extra Light". Apparentemente, Qt sta facendo un po 'di magia interna (forse specifica per piattaforma) per convertire tra il numero di peso 0-99 e il nome di uno stile, e non sembra farlo bene. Sono diventato troppo impantanato nelle fonti Qt per capire esattamente dove stava accadendo questa mappatura.

Per aggiungere alle stranezze, QFont :: setWeight prende un numero compreso tra 0 e 99 (come ho detto in precedenza), ma la proprietà di peso del carattere nel foglio di stile prende un numero compreso tra 100 e 800, quindi lo divide per 8 e chiama setWeight. Suppongo che questo corrisponda maggiormente allo CSS weight numbering system.

Ora devo solo capire che tipo di trucco ho intenzione di fare per aggirare questo.Posso facilmente aggiungere qualcosa come font-style-name al qcssparser, ma preferirei non applicare patch ai sorgenti Qt, quindi probabilmente farò qualcosa a livello di applicazione.

+4

Risulta che questo è solo un problema in Mac OS X. Probabilmente dovrei presentare una segnalazione di bug Qt. Se si esegue lo stesso identico codice per selezionare esattamente lo stesso font TrueType su Mac e Linux (entrambi con Qt 4.8.4) si ottengono risultati diversi. La versione Linux/X11 fa quello che ti aspetti. – ScottG

Problemi correlati