首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt中的QPropertyAnimation of scenePos

Qt中的QPropertyAnimation of scenePos
EN

Stack Overflow用户
提问于 2014-01-10 14:37:56
回答 1查看 580关注 0票数 2

我被困在一个简单的属性动画在一个场景中的属性。这个项目只需移动一段距离。有了房产"pos“它就会移动。使用我的属性"ScenePosition“,它不能工作。调试器进入函数setScenePosition(),但对显示的场景没有影响。

代码语言:javascript
复制
// chip.h
class Chip : public QObject, public QGraphicsEllipseItem
{
    Q_OBJECT
    //THIS WORKS - But i have to use scenePosition instead because of the scene
    Q_PROPERTY(QPointF pos READ pos WRITE setPos) 

    // MY ATTEMPT
    Q_PROPERTY(QPointF ScenePosition READ ScenePosition WRITE setScenePosition)

public:
    explicit Chip(int x, int y, int w, int h, QObject *parent=NULL);


    void setScenePosition(QPointF p);
    QPointF ScenePosition();

};

我想我使用scenePos()的方式是错误的。

代码语言:javascript
复制
    //chip.cpp
    void Chip::setScenePosition(QPointF p)
    {
        this->scenePos().setX(p.x());
        this->scenePos().setY(p.y());
    }

最后是动画的呼唤。这个调用似乎没问题,因为它适用于新的QPropertyAnimation(item,"pos"),但不适用于"ScenePosition“wich,这让我对setter的实现产生了怀疑。

代码语言:javascript
复制
        item  = new Chip(col*wCol, 100, wCol, wCol);
        item->setVisible(true);
        QPropertyAnimation *animation  = new QPropertyAnimation(item, "ScenePosition");
        addItem(item);

        animation->setDuration(1000);
        animation->setEndValue( QPoint(col*wCol, 400 - wCol*stacked) );
        animation->setEasingCurve(QEasingCurve::OutElastic);
        animation->start();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-10 18:31:49

this->scenePos()返回QPointF。使用this->scenePos().setX(p.x());只会影响临时QPointF对象,显然不会影响项目位置。您需要使用类似于this->setScenePos(p);的东西。然而,并没有这样的方法。如果该项目没有父项,则this->setPos(p)将等效地工作。如果项目有父项,则可以使用this->setPos(this->parentItem()->mapfromScene(p));mapFromScenep从场景坐标转换为父项坐标系,子项使用父项坐标系统定位,因此应该正确工作。

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

https://stackoverflow.com/questions/21047040

复制
相关文章

相似问题

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