gpt4 book ai didi

c++ - QPainter::drawText,获取每个字符的边界框

转载 作者:太空狗 更新时间:2023-10-29 20:15:20 25 4
gpt4 key购买 nike

我正在使用 QPainter 在 QImage 上绘制多行文本。但是,我还需要在每个字符的边界框周围显示一个彩色矩形。

所以我需要知道每个字符在绘制时的边界框。

例如,对于

painter.drawText(QRect(100, 100, 200, 200), Qt::TextWordWrap, "line\nline2", &r);

考虑到换行、自动换行、制表符等,我需要得到 10 个矩形。

例如,第二个 'l' 的矩形将在第一个 'l' 的矩形下方,而不是在 的右侧'e',因为有换行符。

类似于这张图片中红色矩形的坐标(我用手把它们放在了正确的位置):

enter image description here

最佳答案

这可能不是最好的解决方案,但这是我能想到的最好的解决方案。

我相信您将不得不“自己动手”。也就是说,不是绘制文本 block ,而是一次绘制每个字符。然后你可以使用 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 - 否则整体算法是相同的。

关于c++ - QPainter::drawText,获取每个字符的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13364231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com