C++ 使用现有Q_属性设置QGraphicsItem继承QObject的动画
我有两个类,一个主窗口,我们在其中绘制一个QGraphics视图,一个圆圈(打算成为一个按钮!),这是由于另一个类创建的。 MyCircle类继承自QObject和QGraphicsItem,因为我想制作动画 我的问题如下: 我的目标是首先在我的绘图上制作一个简单的动画:使它变小,然后恢复到原始大小。所以我想我应该使用属性几何体,它已经存在于QObject类中 为此,我在MainWindow.ccp中写入C++ 使用现有Q_属性设置QGraphicsItem继承QObject的动画,c++,qt,inheritance,qt5,qproperty,C++,Qt,Inheritance,Qt5,Qproperty,我有两个类,一个主窗口,我们在其中绘制一个QGraphics视图,一个圆圈(打算成为一个按钮!),这是由于另一个类创建的。 MyCircle类继承自QObject和QGraphicsItem,因为我想制作动画 我的问题如下: 我的目标是首先在我的绘图上制作一个简单的动画:使它变小,然后恢复到原始大小。所以我想我应该使用属性几何体,它已经存在于QObject类中 为此,我在MainWindow.ccp中写入 animationBoutonRondTaille = new QPropertyAnim
animationBoutonRondTaille = new QPropertyAnimation(roundButton, "geometry");
animationBoutonRondTaille->setDuration(1000);
animationBoutonRondTaille->setKeyValueAt(0, QRect(-100, -100, 200, 200));
animationBoutonRondTaille->setKeyValueAt(0.5, QRect(-80,-80,160,160));
animationBoutonRondTaille->setKeyValueAt(1, QRect(-100, -100, 200, 200));
animationBoutonRondTaille -> start();
如果我不包括
class MyCircle : public QObject, public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
/.../
}
我收到以下错误消息:
QPropertyAnimation: you're trying to animate a non-existing property geometry of your QObject
但如果我这样做了,我会得到这个:
'class MyCircle' has no member named 'geometry'/'setgeometry'
如果我必须自己定义几何体属性,那么继承QObject的目的是什么
希望你能帮助我,如果我的问题含糊不清,很抱歉,这是我的第一个问题,所以我真的不知道你期望什么
如果您花时间回答,非常感谢。首先
QObject
没有几何体属性。它是QWidget
的一个属性。错误消息告诉您没有geometry
和setGeometry
成员函数。所以你必须提供这些方法。请参阅。首先QObject
没有几何体
属性。它是QWidget
的一个属性。错误消息告诉您没有geometry
和setGeometry
成员函数。所以你必须提供这些方法。请参阅。您必须实现geometry
和setGeometry
方法,Q\u属性
用于使用setProperty(“geometry”,some\u值)
和属性(“geometry”)
函数调用函数,这些函数在QPropertyAnimation
中内部使用,以及在Setter函数中(在本例中为setGeometry
),必须调用update()
来更新图形
mycircle.h
#ifndef MYCIRCLE_H
#define MYCIRCLE_H
#include <QGraphicsItem>
#include <QObject>
#include <QPainter>
#include <QStyleOptionGraphicsItem>
class MyCircle : public QObject, public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
Q_INTERFACES(QGraphicsItem)
public:
explicit MyCircle(QObject *parent = nullptr);
QRect geometry() const;
void setGeometry(const QRect &value);
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget);
private:
QRect rect;
};
#endif // MYCIRCLE_H
可以找到一个完整的示例您必须实现geometry
和setGeometry
方法,Q\u属性
用于使用setProperty(“geometry”,some\u值)
和属性(“geometry”)
函数调用函数,这些函数在QPropertyAnimation
中内部使用,以及在Setter函数中(在本例中为setGeometry
),必须调用update()
来更新图形
mycircle.h
#ifndef MYCIRCLE_H
#define MYCIRCLE_H
#include <QGraphicsItem>
#include <QObject>
#include <QPainter>
#include <QStyleOptionGraphicsItem>
class MyCircle : public QObject, public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
Q_INTERFACES(QGraphicsItem)
public:
explicit MyCircle(QObject *parent = nullptr);
QRect geometry() const;
void setGeometry(const QRect &value);
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget);
private:
QRect rect;
};
#endif // MYCIRCLE_H
可以找到一个完整的例子我的错误!谢谢你的回答。我确实犯了错误!谢谢你的回答。