0

QSvgRenderer とテキスト要素に少し問題があります。boundsOnElement() を呼び出すたびに、(もちろん、matrixForElement() を適用した後) テキスト要素の左上隅に正しく対応する QRect が返されますが、その幅と高さは常にゼロです。

私は PySide を使用しているため、実装されていない Python のレイヤーに問題がある可能性がありますが、Qt や他の場所での SVG テキストのサポートが不十分なため、そうではないと考えています。誰かがいます:

  • Qtを直接使用してこれを経験し、

そして更に重要なことに:

  • Qt で SVG テキスト要素のサイズを取得する方法はありますか?

フォントサイズ、文字列の長さなどに基づいて、手動で推測しようと考えていますが、これは非常にエラーが発生しやすいようで、可能であれば正しく実行したいと考えています。誰かがタイプセットの経験を持っている場合、これをハックする必要がある場合に考慮する必要があることへのポインタは大歓迎です.

4

1 に答える 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 に答える