gpt4 book ai didi

c++ - 子类是否需要 Q_INTERFACES 宏?

转载 作者:行者123 更新时间:2023-12-05 05:42:27 24 4
gpt4 key购买 nike

如果我有实现接口(interface)的类 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")

啊啊

#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?
...
};

最佳答案

qobject_cast 需要

Q_INTERFACES函数以正确地与类实现的接口(interface)一起工作。因此,如果您想使用此功能,您必须将 Q_INTERFACES 放入您的类中。

文档并不清楚继承发生了什么,但是生成的 qt_metacast 函数的实现总是调用它们的父 qt_metacast。因此,在您的示例中,即使您没有将 Q_INTERFACES 宏放入 B 类中,它仍应与 qobject_cast 函数一起使用,因为它会将其传递给 A 以执行。

关于c++ - 子类是否需要 Q_INTERFACES 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72027739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com