我在使用QSvgRenderer和文本元素方面遇到了一些麻烦;每当我调用boundsOnElement()时,我都会返回一个正确对应文本元素左上角的QRect(当然,在应用了matrixForElement()之后),但它的宽度和高度始终为零。
我正在使用PySide,因此可能有一些未实现的Python层出错,但是poor support of SVG text in Qt and elsewhere让我想到了。有没有人:
,更重要的是:
我正在考虑根据字体大小,字符串长度等手动猜测,但这似乎非常容易出错,如果可以的话,我想要正确地做。如果有人有任何排版经验,如果我不得不破解这些事情我需要考虑的事项的指示当然是受欢迎的。
答案 0 :(得分: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正在使用的算法忽略了这一特性。