web-dev-qa-db-fra.com

Mesurer la largeur du texte en Qt

En utilisant le framework Qt, comment mesurer la largeur (en pixels) d'un morceau de texte rendu avec une police/un style donné?

47
Tony the Pony

Depuis Qt 5.11, vous devez utiliser horizontalAdvance() méthode de QFontMetrics class au lieu de width(). width() est maintenant obsolète.

QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");

QFontMetrics fm(myFont);
int width=fm.horizontalAdvance(str);
1
Sebastien247

Vous pouvez utiliser QFontMetrics class - voir la méthode width () qui peut vous donner la largeur d'une QString donnée.

QFont myFont(fontName, fontSize);;
QString str("I wonder how wide this is?");

QFontMetrics fm(myFont);
int width=fm.width(str);
74
Paul Dixon

Dans le paintEvent

QString text("text");
QFontMetrics fm = Painter.fontMetrics();
int width = fm.width(text);
12
Alexander

En complément de la réponse de @Paul, j'ai trouvé que lors de la peinture de texte (Qt4.8 sous Linux), la largeur d'un texte réellement peint par rapport à la largeur de quoi QFontMetrics::boundingRect renvoie souvent désactivé. Dans mes cas, la peinture était souvent trop large.

Si vous voulez des résultats précis lorsque vous peignez du texte (par exemple pour coter des rectangles que vous dessinez autour du texte), utilisez mieux les fonctions boundingRect fournies directement par QPainter.

6