关于QPlugin的一点小问题。
Unsolved
Chinese
-
最近要做一个可动态加载的插件,由于后面可能要跨平台,因此打算用QtPlugin来实现,结果刚起步就遇到一个坑。具体情况如下:
写了一个接口文件,命名为interface.h:
#pragma once
#include <QtPlugin>
struct AAA
{
AAA() {}
virtual ~AAA() {}
virtual void test() = 0;
};#define AAA_iid "TEST.AAA"
Q_DECLARE_INTERFACE(AAA, AAA_iid)
紧接着写它的派生类文件BBB.h
#include "interface.h"
class BBB: public QObject, public AAA
{
Q_OBJECT
Q_PLUGIN_METADATA(IID AAA_iid)
Q_INTERFACES(AAA)
public:
BBB();
~BBB() {}
void test() { }
};
BBB.cpp也是存在的,但里面是空的。看似都没有问题,此时点击生成,结果编译报错:
Parse error at "IID"被折磨一天之后,发现只要interface.h文件放在其他目录下,和第三方文件一样包含进来就会出这个错。将其拷贝到工程目录下,和工程里派生类放一起,这个问题就会消失。看着就很奇怪,有没有人知道是为啥?
我的环境是vs2017,用的qt是5.9和5.12(问题一样,我还试了网上说的更换qt vs tools,完全没效果)