2012-06-28 60 views
0

我一直對QSvgRenderer和文本元素有點麻煩;每次我調用boundsOnElement()時,我都會返回一個正確對應於文本元素左上角的QRect(當然,在應用matrixForElement()之後),但其寬度和高度始終爲零。QSvgRenderer boundsOnElement()總是返回文本元素的大小0,0

我正在使用PySide,所以有可能某些未實現的Python層出錯,但poor support of SVG text in Qt and elsewhere讓我覺得不對。有沒有人:

  • 直接經歷過這種使用Qt,

,更重要的是:

  • 有任何想法如何獲得Qt中的SVG文本元素的大小?

我在考慮嘗試根據字體大小,字符串長度等手動猜測,但這似乎很容易出錯,如果可以完成,我想正確地做到這一點。如果任何人有任何排版的經驗,我需要考慮的事情的指針,如果我必須破解這個,當然是受歡迎的。

+0

對於後代,我最終使用了等寬字體,截取了截圖,用手測量字母的寬度,並將該寬度乘以字符串的長度。這顯然不是實現這一目標的最佳方式,但它至少可行。儘管如此,我並不是信使的忠實粉絲,所以仍然歡迎回答/評論。 – yasashiku

+0

我想你遇到了這個bug:https://bugreports.qt-project.org/browse/QTBUG-2002 – rutsky

回答

1

我也遇到過這個bug。另一種方法是使用QFontMetrics類。

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

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

這將返回非零邊界:(或QFontMetricsF類)

實施例。但是,根據我的經驗,雖然此例程會返回準確的原點和高度信息,但寬度通常比應該長。您的文本字符串的時間越長,在此邊界框的末尾就會出現更多的「填充」。如果有人有解決方案錯誤,請讓我知道。

更新:這個大小錯誤是特定字體所特有的。例如:Times New Roman顯得非常準確,而其他字體可能計算得太短或太長。這似乎意味着Qt正在使用的算法忽略了某些字體中的特定特徵。

相關問題