这可能不是最好的解决方案,但它是我能想到的最好的解决方案。
我相信你将不得不“自己做”。也就是说,不是绘制一个文本块,而是一次绘制一个字符。然后你可以使用 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 - 否则整体算法是相同的。