2017-05-04 100 views
0

我从QGraphicsItem派生自定义项并增加了一些属性QPropertyAnimation如何创建自定义属性GraphicsItem,并用它在QPropertyAnimation

 Q_PROPERTY(qreal x READ x WRITE setX); 
     Q_PROPERTY(qreal y READ y WRITE setY); 
     Q_PROPERTY(QPointF pos READ pos WRITE setPos); 

这是我的头文件

#ifndef MYSQUARE_H 
    #define MYSQUARE_H 
    #include<QObject> 
    #include<QPainter> 
    #include<QGraphicsItem> 
    #include<QGraphicsItemGroup> 
    #include<QGraphicsPixmapItem> 
    #include<QPainterPath> 
    #include<QPointF> 
    #include<QSizeF> 
    #include<QImage> 
    #include<QLabel> 
    #include<QCoreApplication> 
    #include <QStringBuilder> 
    #include <QString> 
    #include <QTranslator> 
    #include <QList> 
    #include <QVariant> 
    #include <QDebug> 
    #include <QtSvg> 
    #include <QSvgGenerator> 
    #include "arrow.h" 
    #include "mysvgitem.h" 
    class QGraphicsSvgItem; 
    class QPolygonF; 
    class Arrow; 

    class MySquare : public QObject, public QGraphicsItem 
    { 
     Q_OBJECT 
     Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity); 
     Q_PROPERTY(QPointF pos READ pos WRITE setPos); 
     Q_PROPERTY(qreal x READ x WRITE setX); 
     Q_PROPERTY(qreal y READ y WRITE setY); 
     enum resize_direction 
     { 
      rd_none, 
      rd_left, 
      rd_top, 
      rd_right, 
      rd_bottom 
                                     1,1   Top 
     }; 
    public: 
     MySquare(); 

     QRectF boundingRect() const; 
     QPolygonF polygon() const { return myPolygon; } 
     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 
     bool Pressed; 
     void addArrow(Arrow *arrow); 
     QPointF returnCenter(); 
     void setMyPolygon(); 
     void setItemSize(qreal height,qreal width); 
     void setImage(const QString& str); 
     void setImage(const QString& str ,QSize); 
     void setImage(const QString& str ,QRectF rec); 
     void setSvgImage(const QString& str); 
     void setSvgImage(const QString& str ,QSizeF); 
     void setSvgImage(const QString& str ,QRectF rec); 
     void setText(const QString& str ,QRectF rec); 
     ~MySquare(); 
    signals: 
     void click(); 

    protected: 
     void mousePressEvent(QGraphicsSceneMouseEvent *event); 
     void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); 
     void mouseMoveEvent(QGraphicsSceneMouseEvent *event); 
     QVariant itemChange(GraphicsItemChange change, const QVariant &value) ; 
    private: 
     QPolygonF myPolygon; 
     QList<Arrow *> arrows; 
     QRectF myItemRect; 
     QString MyText; 
     QRectF MyTextRect; 
     QGraphicsTextItem *itemXY; 
     QString *posXY; 
     resize_direction resize_direction_; 


    }; 

    #endif // MYSQUARE_H 

特别是我想创建属性以在动画中使用它,怎么可能做到。我尝试使用大小属性,如 Q_PROPERTY(QSize大小READ大小WRITE设置大小);

,但我收到错误

moc_mysquare.cpp: In member function ‘virtual int MySquare::qt_metacall(QMetaObject::Call, int, void**)’: 
    moc_mysquare.cpp:138:55: error: ‘size’ was not declared in this scope 
      case 1: *reinterpret_cast< QSize*>(_v) = size(); break; 
               ^
    moc_mysquare.cpp:149:55: error: ‘setSize’ was not declared in this scope 
     case 1: setSize(*reinterpret_cast< QSize*>(_v)); break; 

回答

1

你的财产状态, “有一个名为大小()和的setSize()函数”。但你班上没有他们。

+0

非常感谢,我在我的课程中添加了size()和setSize()函数,现在它已经可以工作 – Tigran84

相关问题