【问题标题】:How can I invoke a method of Qt Quick 2 Extension Plugin?如何调用 Qt Quick 2 Extension Plugin 的方法?
【发布时间】:2017-08-04 10:37:51
【问题描述】:

我有一个 Subdirs 项目,有两个子项目。一个是 Qt Quick Controls 2 应用程序,另一个是 Qt Quick 2 扩展插件。

TestQtQuickPlugin    ( Subdirs project )
    |----app         ( Qt Quick Controls 2 Application )
    |     |------main.cpp
    |    ...
    |----plugin      ( Qt Quick 2 Extension Plugin )
    |       |----MyItem.h
    |       |----MyItem.cpp
    |      ...

MyItem 类继承自 QQuickItem,它有一个方法 int getNum()。在main方法中,我会通过MyItem().getNum()调用这个方法。

在 Ubuntu 中,它编译并运行成功。但是在Windows中,会出现错误:

main.obj : error LNK2019: unresolved external symbol "public: __cdecl MyItem::MyItem(class QQuickItem *)" (??0MyItem@@QEAA@PEAVQQuickItem@@@Z) 在函数 main 中引用

main.obj : 错误 LNK2019: 函数 main 中引用的未解析的外部符号“public: virtual __cdecl MyItem::~MyItem(void)”(??1MyItem@@UEAA@XZ)

main.obj : 错误 LNK2019: 函数 main 中引用的无法解析的外部符号“public: int __cdecl MyItem::getNum(void)” (?getNum@MyItem@@QEAAHXZ)

我的项目有什么问题?

【问题讨论】:

  • 您确定要在 C++ 中创建 QQuickItem 派生类的实例吗?
  • @KevinKrammer 不,我只想调用该类的静态方法
  • 啊,好的,您的语法是创建一个临时实例并在其上调用一个方法

标签: c++ qt qtquick2


【解决方案1】:

Windows 在创建动态链接库时使用“符号隐藏”。

为了使符号在此类库之外“可见”,需要“导出”它们。

在此处查看documentation

这实际上也可以在 Linux 上通过为 g++ 设置相应的标志来启用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多