2016-06-20 18 views
1

Ich habe Probleme mit der QFontMetrics 'BoundingRect' -Funktion, es gibt nicht die richtigen Ergebnisse zurück.QFontMetrics BoundingRect

mfntArial = QFont("Arial", 12, QFont::Bold); 
    QFontMetrics objMetrics(mfntArial); 
    QRect rctLine = objMetrics.boundingRect("LOS"); 

Im Debugger rctLine enthält:

x1 : 1 
    x2 : 26 
    y1 : -16 
    y2 : 4 

Das ist sehr verwirrend, ich würde x1 und y1 bis beide 0 sein erwarten, da keine Referenzposition passiert ist, und ich würde beide x2 erwarten und y2 ist positiv.

Das zurückgegebene Rechteck ist nicht korrekt und wenn ich es mit drawText und Ausrichtung verwende, dann fehlt ein Teil der Zeichenfolge in der Anzeige.

Ich weiß, es gibt andere Beiträge in Bezug darauf, wie diese Funktion die falschen Ergebnisse zurückgibt, und ich habe diese angesehen, sie haben mir nicht geholfen.

Ich verwende Qt5.6 auf RedHat 7.2.

Ich habe auch versucht:

QRect rctParent = pobjParent->geometry(); 
    QRect rctLine = objMetrics.boundingRect(rctParent, intAlign, "LOS"); 

Wo pobjParent ist das übergeordnete Widget und rctParent enthält:

x1 : 8 
    x2 : 289 
    y1 : 24 
    y2 : 447 

intAlign 33 enthält (links, oben)

In diesem Fall rctLine Rückkehr:

x1 : 8 
    x2 : 35 
    y1 : 24 
    y2 : 44 

Aber der Begrenzungsrextangle ist immer noch zu klein und ein Teil des 'S' fehlt beim Rendern.

Official Qt documentation on QFontMetrics

+0

Gleiches Problem [hier] (http://stackoverflow.com/questions/27336001/qfontmetrics-returns-inaccurate-results). Dokumentation [hier] (http://doc.qt.io/qt-4.8/qfontmetrics.html#boundingRect-2). – LogicStuff

Antwort

0

ich mein Problem behoben haben, indem die Breite der Berechnung, was ich denke, ist eine der breitesten Zeichen, ‚M‘.

QRect rctCapM = objMetrics.boundingRect(rctParent, intAlign, "M"); 

ich dies dann als eine typische verwenden und dann die gewünschte Begrenzungsrechteck für andere Saiten berechnen:

QRect rctBounds(0, 0, rctCapM.width() * strLine.length(), rctCapM.height()); 

Wo strLine 'die Zeichenfolge, die Grenzen für anzuzeigen enthält und zu berechnen, dies funktioniert mich.