gpt4 book ai didi

qt - 如何使用 QFontMetrics boundingRect 来测量多行消息的大小?

转载 作者:行者123 更新时间:2023-12-01 10:34:46 28 4
gpt4 key购买 nike

我想实现一个 QGraphicsElement,它在圆角矩形内“按原样”绘制文本。

为了实现 QGraphicsElement 我需要实现 boundedRect 函数,所以我需要原样的多行消息的 boundedRect 。

据我了解,这是我需要使用的功能 http://doc.qt.io/qt-4.8/qfontmetrics.html#boundingRect-6因为它说它会将换行符视为换行符。

现在我的问题是这样的,如果我想知道的信息是文本的boundedRect,我怎么需要将boundedRect作为参数传递?

谁能给我一个如何获得多行 QString 的 boundedRect 的例子?或者我是否需要手动计算换行符并将其乘以单行高度?

编辑:

正如 arhzu 所示,作为参数传递的 QRect 用于定义多行文本的包含方式。然而,这没有用。因为我希望所述边界框的宽度不使用自动换行。这应该只是最长字符串的宽度。所以,我再问一下,有没有办法获得这个?或者我应该用换行符分割字符串,然后简单地添加高度并使用找到的最大宽度?

最佳答案

rect QFontMetrics::boundingRect 的论据限制输入文本的布局。您可以使用 Qt::TextWordWrap将长行包装到约束矩形内的多行的标志。这是一个允许文本宽度变化的示例:

#include <QApplication>
#include <QFontMetrics>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFontMetrics fm = a.fontMetrics();

QString text = QLatin1String("Multiline text string\n"
"containing both long lines and line breaks\n"
"to\n"
"demonstrate bounding rect calculation");

QList<int> widths = QList<int>() << 100 << 200 << 1000;
foreach(int width, widths) {
qDebug() << "With word wrapping:" << fm.boundingRect(QRect(0,0,width,100), Qt::TextWordWrap, text);
}

foreach(int width, widths) {
qDebug() << "No wrapping" << fm.boundingRect(QRect(0,0,width,100), 0, text);
}

return 0;
}

在我的系统上运行它会打印
With word wrapping: QRect(0,0 87x144)
With word wrapping: QRect(0,0 194x96)
With word wrapping: QRect(0,0 236x64)
No wrapping QRect(0,0 236x64)
No wrapping QRect(0,0 236x64)
No wrapping QRect(0,0 236x64)

编辑:添加了没有自动换行的边界矩形计算。在这种情况下,边界 rect 参数似乎不用于任何事情。

关于qt - 如何使用 QFontMetrics boundingRect 来测量多行消息的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37671839/

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