首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用QGraphicsSvgItem在QGraphicsScene上渲染动画QSvgRenderer

用QGraphicsSvgItem在QGraphicsScene上渲染动画QSvgRenderer
EN

Stack Overflow用户
提问于 2013-11-07 08:27:25
回答 1查看 1.6K关注 0票数 0

我所做的:

我正在创建一个新的QGraphicsScene:

代码语言:javascript
复制
scene = new QGraphicsScene;

我从QGraphicsSvgItem继承了一个类:

代码语言:javascript
复制
//hFile
class MySVGItem: public QGraphicsSvgItem
{
public:
    MySVGItem(QSvgRenderer *renderer, int x, int y);

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

private:
    int x;
    int y;
};

代码语言:javascript
复制
//cpp File
Roboter::Roboter(QSvgRenderer *renderer, int x, int y)
{
    this->setSharedRenderer(renderer);
    this->x = x;
    this->y = y;
    setZValue((x + y) % 2);
}

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

代码语言:javascript
复制
QSvgRenderer *renderer = new QSvgRenderer(QLatin1String(":/res/file.svg"));

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

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

代码语言:javascript
复制
view()->setScene(scene);

发生了什么:

MySVGItem中的对象显示在它们应该显示的位置,但是它们没有正确地显示,就像您的对象静止不动(直到我激活了一些事件,比如悬停或拖动它们--这些代码片段在这里没有显示)。

实际问题:

如何正确呈现这些"MySVGItem“项,并显示它们的动画?

编辑

代码语言:javascript
复制
public
QRectF boundingRect() const;
QPainterPath shape() const;

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-02-05 14:50:31

您需要将信号QSvgRenderer::repaintNeeded()连接到MySVGItem代理插槽,例如,“重新绘制”。

代理时隙的实现

代码语言:javascript
复制
void MySVGItem::repaint()
{
  update();
}

使用QGraphicsSvgItem::renderer()具有默认的"engine“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19831042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档