2009-09-16 6 views
2

Pourquoi la fonction suivante renvoie 0? (Mon environnement est Windows Vista, vC++ 9, Qt4.5)QFontMetrics :: leading() renvoie 0

 

int func() 
{ 
    QPushButton button("Blah blah"); 
    QFontMetrics fm = button.fontMetrics(); 
    return fm.leading(); 
} 
 

Appel à "fm.height()" renvoie des résultats raisonnables (16 px dans mon cas). L'appel à "fm.lineSpacing()" renvoie le même résultat que "fm.height()".

Appel à "fm.boundingRect (QRect(), 0," première ligne \ n deuxième ligne \ n troisième ligne "). Height();" renvoie 16 * 3, c'est-à-dire à nouveau l'interligne non inclus dans le résultat ...

Est-ce que cette utilisation incorrecte est de mon côté ou quelque chose d'autre?

Répondre

1

Selon les documents lineSpacing() est toujours égale à height() + leading()

height() est toujours égale à ascent()+descent()+1 (la figure 1 est pour la ligne de base).

De here leader est « l'espace vertical entre les lignes de texte - nom vient de la pièce physique de plomb qui était autrefois utilisé dans le processus d'impression mécanique pour séparer les lignes de texte »

Alors, quelle police êtes-vous en utilisant, et utilise-t-il une taille nulle menant?

+0

J'utilise une police prédéfinie (police par défaut pour les boutons sur le système Vista) pour les légendes des boutons (le texte des boutons dans la terminologie Qt). Lorsque je place un texte multiligne sur le bouton, chaque ligne de texte se sépare des lignes voisines avec de l'espace (espace non nul). Donc, je ne peux pas comprendre, pourquoi leading() renvoie "0", mais en effet j'ai un certain espacement entre les lignes (que je ne peux pas calculer pensait leading() appel) ... – cybevnm