2016-06-20 1 views
1

QFontMetrics 'boundingRect'関数に問題がありますが、正しい結果が返されません。デバッガでQFontMetrics boundingRect

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

、rctLineが含まれています

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

これは非常に混乱して、渡された何の基準位置が存在しないので、私は両方のX1とY1は0に期待すると私は両方X2を期待し、 y2は正となる。

返される矩形が正しくないため、drawTextと配置で使用すると、文字列の一部が表示されません。

この関数がどうやって間違った結果を返すかについて、私は知っていますが、私はこれらを見て、彼らは私を助けませんでした。

RedHat 7.2でQt5.6を使用しています。

私も試してみた:

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

intAlignが33含まれています(左、上)

この場合のrctLineには:pobjParentは親ウィジェットであるとrctParentが含まれてい

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

返信:

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

しかし、境界の再結び目はまだ小さく、レンダリング時に 'S'の一部が欠けています。

Official Qt documentation on QFontMetrics

+0

同じ問題[こちら](http://stackoverflow.com/questions/27336001/qfontmetrics-returns-inaccurate-results)ドキュメンテーション[here](http://doc.qt.io/qt-4.8/qfontmetrics.html#boundingRect-2) – LogicStuff

答えて

0

私は「M」、最も幅の広い文字の一つと思われるものの幅を計算することによって、私の問題を修正しました。

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

私はその後、典型的なとしてこれを使用して、他の文字列に必要な外接矩形を計算します。

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

「strLine変数の値は、」の境界を表示し、計算するための文字列を含む場合、これがために働きます私。

関連する問題