为了在我的应用程序中显示 SVG 绘图,我使用 GtGui.QgraphicsView、QtGui.QgraphicsScene、QtSvg.QgraphicsSvgItem。因为 QsvgRenderer 支持动画 SVG 绘图,所以我在我的 SVG 文件中集成了一些动画元素,例如:
<circle cx="x" cy="x" r="z" class="style">
<animate attributeName="r" attributeType="XML"
from="0"
to="z"
begin="0s"
dur="2s"
fill="remove"
restart="always"
repeatCount="indefinite"
end="indefinite"
/>
</circle>
在 Firefox 中,圆圈按预期运行,在 QgraphicsView 中他没有动画。
所以我尝试了“animateTransform”:
<circle cx="x" cy="x" r="z" class="style">
<animateTransform attributeName="transform" type="translate"
begin="0"
dur="2s"
from="x y" to="0 0"
...
additive="sum"
/>
<animateTransform attributeName="transform" type="scale"
begin="0"
dur="2s"
from="0" to="1"
…
additive="sum"
/>
</circle>
它适用于 QgraphicsView 以及 Firefox。我的问题已解决,但我想了解它。谁能解释这种行为?
补充:QSvgRenderer.animated() 在第一种情况下返回 FALSE,在第二种情况下返回 TRUE。
编辑于 01.05.2014:首先我在 Linux(Ubuntu 13.10)上使用 Python 3.3、Qt 4.8 和 PyQt 4.10.4,在升级到 Ubuntu 14.04 后,我尝试了 Python 3.4、Qt 5.2.1 和 PyQt 5.2.1(因为从Qt 4.8 到 5.2 是对应用程序代码的一些必要修改,但在 svg-files 中的 xml-code 中没有),QgraphicsView 的行为在两个版本中是相同的。