0

我在使用 QSvgRenderer 和文本元素时遇到了一些麻烦;每次调用 boundsOnElement() 时,我都会返回一个正确对应于文本元素左上角的 QRect(当然是在应用 matrixForElement() 之后),但它的宽度和高度始终为零。

我正在使用 PySide,因此可能是某些未实现的 Python 层有问题,但是Qt 和其他地方对 SVG 文本的支持不佳让我不这么认为。有没有人:

  • 直接使用Qt体验过这个,

而且,更重要的是:

  • 知道如何在 Qt 中获取 SVG 文本元素的大小吗?

我正在考虑根据字体大小、字符串长度等尝试手动猜测,但这似乎很容易出错,如果可以的话,我想正确地做。如果有人有任何排版经验,如果我必须破解这个,我需要考虑的事情的指针当然是受欢迎的。

4

1 回答 1

1

我也遇到过这个错误。一种替代方法是使用QFontMetrics类。(或QFontMetricsF类)

例子:

QSvgGenerator svg;
QFont font("Arial", 12);
QFontMetricsF metrics(font, &svg);

QString text = "My SVG String";
QRectF bounds = metrics.boundingRect(text);

这将返回非零边界。但是,根据我的经验,虽然此例程将返回准确的原点和高度信息,但宽度通常比应有的长。您的文本字符串越长,此边界框末尾的“填充”就越多。如果有人对此错误有解决方案请告诉我。

更新:这个尺寸错误是特定字体所独有的。例如:Times New Roman 似乎计算得非常准确,而其他字体可能计算得太短或太长。这似乎暗示了 Qt 正在使用的算法忽略了某些字体中的特定特征。

于 2012-07-25T20:04:50.490 回答