私がやること:
新しい 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