我所做的:
我正在创建一个新的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发布于 2015-02-05 14:50:31
您需要将信号QSvgRenderer::repaintNeeded()连接到MySVGItem代理插槽,例如,“重新绘制”。
代理时隙的实现
void MySVGItem::repaint()
{
update();
}或
使用QGraphicsSvgItem::renderer()具有默认的"engine“。
https://stackoverflow.com/questions/19831042
复制相似问题