2017-05-04 40 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

相關問題