gpt4 book ai didi

c++ - 是否可以使用基类和派生类来实现 Qt Application Plugin?

转载 作者:行者123 更新时间:2023-11-28 04:35:43 30 4
gpt4 key购买 nike

假设我有以下玩具界面:

class iTest{
virtual ~iTest(void) = 0;
virtual void doA(void) = 0;
virtual void doB(void) = 0;
}

Q_DECLARE_INTERFACE(iTest, "somestring")

我想在两个类中实现它:Base 和 Derived。

class Base : public QObject, public iTest
{
Q_OBJECT
Q_PLUGIN_METADATA (IID "somestring")
Q_INTERFACES(iTEST)
explicit Base(QObject* parent=0);
void doA(void); // do common thing all derived need do
int data; // some data member all derived should have
}

class Derived: public Base
{
Q_OBJECT
Q_PLUGIN_METADATA (IID "somestring")
Q_INTERFACES(iTEST)
explicit Derived(QObject* parent = 0);
void doB(); // do something custom dervived objects need do
}

我错误的推理告诉我这应该有效。插件的抽象基类为接口(interface)的一部分提供功能,而派生类构成接口(interface)的其余部分。我可以通过一些明智的删除宏(基类元数据宏)来编译它。但是,生成的插件不会加载。所以我假设我的推理有问题,经验丰富的 Qt 开发人员或 c++ 开发人员可能会指出我看不到的地方。

最佳答案

我相信我已经想出了一个解决方案。正如上面提到的亚历山大五世,基类和派生类中的 Q_ 宏相互冲突。文档指出,代码中只能调用 Q_PLUGIN_METADATA 宏。我想到的是基类本身甚至不需要是 Q_Object,它只是函数的容器。因此,我重新声明类如下:

class Base: public iTest{
void doA(void); // do something all derived should do
int data; // data all derived should have
}

class Derived: public QObject, public Base{
Q_OBJECT
Q_PLUGIN_METADATA (IID "somestring")
Q_INTERFACES(iTEST)
void doB(void): // custom to derived
}

此外,界面需要稍作修改:

...
virtual ~iTest(void){}
...

这是因为析构函数需要定义,不能纯虚。通过这些修改,此结构似乎适用于我的应用程序。

关于c++ - 是否可以使用基类和派生类来实现 Qt Application Plugin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51525696/

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