如果我有实现接口的类A (并使用Q_INTERFACES宏),那么子类B : public A也需要使用Q_INTERFACES宏吗?
例如:
IMovable.h
#include <QObject>
class IMovable
{
public slots:
virtual void moveLeft(int distance) = 0;
virtual void moveRight(int distance) = 0;
virtual void moveUp(int distance) = 0;
virtual void moveDown(int distance) = 0;
signals:
virtual void moved(int x, int y) = 0;
};
Q_DECLARE_INTERFACE(IMovable, "my_IMovable")A.h
#include <QObject>
#include "IMovable.h"
class A : public QObject, public IMovable
{
Q_OBJECT
Q_INTERFACES(IMovable)
public:
explicit A(QObject *parent = nullptr);
virtual ~A();
public slots:
//implement IMovable public slots
void moveLeft(int distance) override;
void moveRight(int distance) override;
void moveUp(int distance) override;
void moveDown(int distance) override;
signals:
//implement IMovable signals
void moved(int x, int y) override;
};B.h
#include "A.h"
class B : public A
{
Q_OBJECT
// Do I need Q_INTERFACES(IMovable) here?
...
};发布于 2022-05-01 05:48:25
需要Q_INTERFACES才能使qobject_cast函数与类实现的接口正确工作。因此,如果要使用这个函数,就必须将Q_INTERFACES放在类中。
Docs不清楚继承会发生什么,但是生成的qt_metacast函数的实现总是调用父qt_metacast。因此,在您的示例中,即使您没有将Q_INTERFACES宏放入B类,它仍然应该使用qobject_cast函数,因为它将传递给A来执行。
https://stackoverflow.com/questions/72027739
复制相似问题