【问题标题】:Q_DECLARE_INTERFACE for plugin creation throws errors all over用于插件创建的 Q_DECLARE_INTERFACE 会抛出错误
【发布时间】:2020-10-21 07:48:17
【问题描述】:

环境:

  • 框架:Qt 5.12.9
  • 编译器:MSVC 15.9.28307.1234 (x64)
  • 调试器:CDB 10.017763.132 (x64)
  • 标准:C++11
  • 编辑器:Qt Creator 4.12.2
  • 操作系统:Win10 企业版 1809

我想开发一个可以通过插件扩展的应用程序。因此,我创建了一个标准库项目,我想在其中定义插件接口。然后这个库应该被主应用程序及其插件使用。

我在官方网站上阅读了Qt插件系统并通过duckduckgo-ing寻求帮助,但我遇到了以下错误:

  • vccplugin.h:16:32:错误:预期的参数声明符 vccplugin.h:14:23:注意:扩展自宏“VccPlugin_iid”
  • vccplugin.h:16:32: 错误: 预期 ')' vccplugin.h:14:23:注意:从宏 'VccPlugin_iid' 扩展 vccplugin.h:16:20: 注意:要匹配这个 '('
  • vccplugin.h:16:1: 错误:C++ 需要所有声明的类型说明符
  • 构建问题:C2059:语法错误:“字符串”

这是代码:

#ifndef VCCPLUGIN_H
#define VCCPLUGIN_H

#include "VccPluginInterface_global.h"

class VCCPLUGININTERFACE_EXPORT VccPlugin
{
public:
    VccPlugin();
    ~VccPlugin();
    void DoeEenTwuk();
};

#define VccPlugin_iid "automation.general.vcc.interface"

Q_DECLARE_INTERFACE(VccPlugin, VccPlugin_iid);

#endif // VCCPLUGIN_H

另外请注意,我在 C++ 和 Qt 方面都没有什么经验。

非常感谢任何帮助, 谢谢

【问题讨论】:

  • 我试图通过在 MainWindow 声明之前将您的代码复制粘贴到一个空项目来重新创建问题,但我没有看到它。我正在使用 Qt 5.12.8 MinGW 7.3 32 位。
  • @NgocMinhNguyen 可能与 msvc 编译器有关吗?我不想安装 mingw,因为它看起来很麻烦,而且我已经有了 Visual Studio...
  • 你可以尝试做同样的事情,创建一个最小的例子。看看问题是否仍然存在。像这样pastebin.com/bKqkspgK.
  • 奇怪,您的示例使用我的相同套件,我不再有错误。我的项目文件应该有问题吗?见pastebin.com/idMH5YTH
  • 我没有发现问题。由于你的项目足够小,我建议将可疑部分一一注释掉,直到你能确定代码的哪一部分是罪魁祸首

标签: c++ c++11 plugins qt5


【解决方案1】:

我找到了问题。问题是编译器找不到宏,所以我只需要添加:

#include <QtPlugin>

由于 Q_DECLARE_INTERFACE 是在 QtPlugin 中定义的。您的示例没有导入 QtPlugin,但可能是由另一个导入隐式导入的,可能是 QMainWindow。

如果你问我,如果我收到类似“找不到符号 Q_DECLARE_INTERFACE”的错误,那会更简单。尤其是因为我在这个话题上相当蓝。

感谢@NgocMinhNguyen 和其他人的支持

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多