これは最善の解決策ではないかもしれませんが、私が考えることができる最善の解決策です。
「自分でやる」必要があると思います。つまり、テキストのブロックを描画する代わりに、各文字を一度に 1 つずつ描画します。次に、QFontMetrics を使用して、各文字の境界ボックスを取得できます。
ちょっとした作業ですが、それほど悪くはありません。次のようなもの(コードではなく疑似コード):
QFontMetrics fm(myFont, paintDevice);
int x = startX;
int y = startY;
for (unsigned int i = 0; i < numChars; i++)
{
char myChar = mystr[i]; // get character to print/bound
QRect rect = fm.boundingRect( myChar ); // get that char's bounding box
painter.drawText(x, y, Qt::TextWordWrap, mystr[i], &r); // output char
painter.drawRect(...); // draw char's bounding box using 'rect'
x += rect.width(); // advance current position horizontally
// TODO:
// if y > lineLen // handle cr
// x = startX;
// y += line height
}
QFontMetrics を確認してください。境界ボックス、最小境界ボックスなどを取得するためのさまざまな方法があります。
QFontMetrics 4.7
ああ...使用しているオーバーロードが実際の境界四角形を返すことがわかりました。それを使用して、必要に応じて QFontMetrics をスキップできます。それ以外の場合、全体的なアルゴリズムは同じです。