3

QSvgWidget を使用して、埋め込まれた svg ファイルをレンダリングしようとしています。私のファイル「front.svg」は次のようになります。

<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="500" height="500" id="svgfile">
<rect style="fill:#ff0000;" id="rect1" width="150" height="200"/>

<svg x="100" y="100">
    <rect style="fill:#00ff00;" id="rect2" width="200" height="120"/>
</svg>
</svg>

このファイルは、Chrome または Inkscape では非常に正常に見えますが、svgwidget では奇妙に見えます。緑の四角形だけが表示され、赤は非常に小さく、緑の四角形の後ろに隠れています。ここに私のpythonコードがあります:

import sys
from PySide.QtGui import QApplication
from PySide.QtSvg import QSvgWidget

if __name__ == '__main__':
    app = QApplication(sys.argv)

    widget = QSvgWidget('front.svg')
    widget.show()

    sys.exit(app.exec_())

私が何か間違ったことをしたのか、それとも PySide のバグなのか、誰かが知っていますか?

4

3 に答える 3

3

この問題の回避策を見つけました。現在、QSvgWidget の代わりに QGraphicsWebView を使用しています。これが私のPythonコードです(svgファイルは変更されていません):

import sys
from PySide.QtGui import QApplication, QGraphicsScene, QGraphicsView
from PySide.QtWebKit import QGraphicsWebView

if __name__ == '__main__':
    app = QApplication(sys.argv)

    item = QGraphicsWebView()
    item.load('front.svg')
    view = QGraphicsView()
    scene = QGraphicsScene()
    scene.addItem(item)
    view.setScene(scene)
    view.show()
    sys.exit(app.exec_())

QTがこのウィジェットでsvgファイルを正しくレンダリングし、専用ウィジェットを使用すると完全に間違っているのは奇妙です(「テキスト」要素にも問題がありました)。しかし、今ではすべて正常に動作しています。

于 2012-07-03T12:40:49.223 に答える
2

<svg>余分な内部タグを削除し、x および y 属性を<rect>要素に移動することで、正しくレンダリングできます。

<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="500" height="500" id="svgfile">
<rect style="fill:#ff0000;" id="rect1" width="150" height="200"/>
<rect style="fill:#00ff00;" id="rect2" x="100" y="100" width="200" height="120"/>
</svg>

ただし、これはその特定のケースをテストするための不自然な例だと思いますか? <svg>ネストされた要素が必要な理由はありますか?

于 2012-06-28T22:39:55.520 に答える
2

私にとって、InkscapeはSVGファイルを意図したとおりにレンダリングしましたが、PyQt4の追加の埋め込みオブジェクトによって作成されたグループオブジェクトに問題があり、私はあなたと同じことを観察しました. したがって、PySide ではなく、SVG 構造の問題であると確信しています。これが役立つことを願っています。

于 2012-07-02T14:29:54.910 に答える