Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用现有Q_属性设置QGraphicsItem继承QObject的动画_C++_Qt_Inheritance_Qt5_Qproperty - Fatal编程技术网

C++ 使用现有Q_属性设置QGraphicsItem继承QObject的动画

C++ 使用现有Q_属性设置QGraphicsItem继承QObject的动画,c++,qt,inheritance,qt5,qproperty,C++,Qt,Inheritance,Qt5,Qproperty,我有两个类,一个主窗口,我们在其中绘制一个QGraphics视图,一个圆圈(打算成为一个按钮!),这是由于另一个类创建的。 MyCircle类继承自QObject和QGraphicsItem,因为我想制作动画 我的问题如下: 我的目标是首先在我的绘图上制作一个简单的动画:使它变小,然后恢复到原始大小。所以我想我应该使用属性几何体,它已经存在于QObject类中 为此,我在MainWindow.ccp中写入 animationBoutonRondTaille = new QPropertyAnim

我有两个类,一个主窗口,我们在其中绘制一个QGraphics视图,一个圆圈(打算成为一个按钮!),这是由于另一个类创建的。 MyCircle类继承自QObject和QGraphicsItem,因为我想制作动画

我的问题如下:

我的目标是首先在我的绘图上制作一个简单的动画:使它变小,然后恢复到原始大小。所以我想我应该使用属性几何体,它已经存在于QObject类中

为此,我在MainWindow.ccp中写入

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

可以找到一个完整的例子

我的错误!谢谢你的回答。我确实犯了错误!谢谢你的回答。