0

我所做的:

我正在创建一个新的 QGraphicsScene:

scene = new QGraphicsScene;

我有一个继承自 QGraphicsSvgItem 的类:

//hFile
class MySVGItem: public QGraphicsSvgItem
{
public:
    MySVGItem(QSvgRenderer *renderer, int x, int y);

    QRectF boundingRect() const;
    QPainterPath shape() const;

private:
    int x;
    int y;
};

//cpp File
Roboter::Roboter(QSvgRenderer *renderer, int x, int y)
{
    this->setSharedRenderer(renderer);
    this->x = x;
    this->y = y;
    setZValue((x + y) % 2);
}

我用其中一些项目填充我的场景,它们都共享相同的渲染器,因为它们应该显示相同的 svg。

QSvgRenderer *renderer = new QSvgRenderer(QLatin1String(":/res/file.svg"));

//some <for> loops
QGraphicsSvgItem *item = new MySVGItem(renderer , x, y);
scene->addItem(item);

然后我将场景设置为一些 QGraphicsView

view()->setScene(scene);

怎么了:

MySVGItem 中的对象显示在它们应该显示的位置,但它们的动画效果不正确,就像你静止不动(直到我激活一些事件,比如悬停或拖动它们 - 这些代码片段未在此处显示)。


实际问题:

如何正确渲染这些“MySVGItem”项目,显示它们的动画?

编辑

public
QRectF boundingRect() const;
QPainterPath shape() const;

QRectF MySVGItem::boundingRect() const
{
    return QRectF(0, 0, 200, 200);
}

QPainterPath MySVGItem::shape() const
{
    QPainterPath path;
    path.addRect(0, 0, 200, 200);
    return path;
}

//The svg File is 200x200
4

1 回答 1

0

You mast connect signal QSvgRenderer::repaintNeeded() to MySVGItem proxy slot, for example, "repaint".

Implementation of proxy slot

void MySVGItem::repaint()
{
  update();
}

OR

Use QGraphicsSvgItem::renderer() to have default "engine".

于 2015-02-05T14:50:31.720 回答