我决定将我的爱好项目应用程序(一个字典查找程序)转换为插件架构,以便将来能够为其他语言开发各种不同的字典。该应用程序是用带有 Qt (5.0.2) 的 Visual C++ 开发的。我将此标头添加到应用程序代码中以定义字典插件的接口:
// dict_plugin.h
#ifndef DICT_PLUGIN_H
#define DICT_PLUGIN_H
#include <QtPlugin>
class PluginInterface
{
public:
virtual ~PluginInterface() {}
virtual QString language() const = 0;
virtual class QWidget* ui() const = 0;
};
Q_DECLARE_INTERFACE(PluginInterface, "pl.ksmvision.winona.PluginInterface")
#endif // DICT_PLUGIN_H
接下来,我从“Qt library”模板为插件本身(使用 Qt Visual Studio 插件)创建了一个新项目,用于制作 dll。主头文件如下所示:
#ifndef JP_PLUGIN_H
#define JP_PLUGIN_H
// created by the template to define Q_DECL_EXPORT
// and _IMPORT macros but the plugin engine takes
// care of that (I think)
//#include "jp_plugin_global.h"
#include <QObject>
#include <QtPlugin>
#include <dict_plugin.h>
class JpPlugin : public QObject, public PluginInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "pl.ksmvision.winona.JpPlugin")
Q_INTERFACES(PluginInterface)
public:
JpPlugin();
virtual ~JpPlugin();
virtual QString language() const;
virtual QWidget* ui() const;
};
#endif // JP_PLUGIN_H
当我尝试构建它时,我在 Q_INTERFACES 行上从 moc 收到一个错误,指定我的插件应该实现的接口:
3>------构建开始:项目:jp_plugin,配置:Debug Win32 ------
3> Moc'ing jp_plugin.h...
3>F:\moje\src\cpp\winona\build \jp_plugin\jp_plugin.h(15): 错误: 未定义接口
========== 构建: 2 成功, 1 失败, 2 最新, 0 跳过 ========= =
看起来 moc'ing 发生在包含 dict_plugin.h 文件之前,因为当我在包含文件名中引入拼写错误时,它不会抱怨该文件不存在,只是使用相同的错误消息终止构建关于未定义的接口。
我究竟做错了什么?谢谢。