c++ - 如何在 Qt 中的插件和应用程序之间使用相同的类?
问题描述
我在 Qt 中创建了一个插件。Plugin Class 和 App Class 使用同一个名为 ShareData 的类。这是 ShareData 类:
//sharedata.h
class ShareData
{
public:
ShareData();
};
//sharedata.cpp
ShareData::ShareData()
{
}
但是当我在插件类中创建一个实例时,如下所示:
//plugin.pro
INCLUDEPATH += $PWD/../echowindow/
//echoplugin.h
#include "sharedata.h"
class EchoPlugin : public QObject, EchoInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.EchoInterface" FILE "echoplugin.json")
Q_INTERFACES(EchoInterface)
public:
EchoPlugin();
ShareData* sharedata;
};
//echoplugin.cpp
EchoPlugin::EchoPlugin()
{
sharedata = new ShareData();
}
然后我运行项目,我得到一个错误:
error: undefined reference to `ShareData::ShareData()'
添加这是我的类结构:
-echoplugin
-echoplugin.pro
-echopluginwindow
-echowindow.pro
-Headers
-echointerface.h
-echowindow.h
-sharedata.h
-Sources
-echowindow.cpp
-main.cpp
-sharedata.cpp
-Plugin
-plugin.pro
-Headers
-echoplugin.h
-Sources
-echoplugin.cpp
我应该怎么做才能在插件 EchoPlugin 类中使用 ShareData 类?
解决方案
插件应该独立于主应用程序,因此您不能使用其中定义的类。您的构建错误可能是因为在插件构建期间未编译 shareddata.cpp。
如果你真的想使用这样的设计,我建议为SharedData
.
INCLUDEPATH
只说您可以使用共享数据的标头。问题出现在链接阶段。
推荐阅读
- python - 带有预测训练的 ImageAI 对象检测
- angular - 在前一个操作通过 NgRx 成功后调度一个操作
- python - 通过广播简化这个三重循环
- sql - 在创建依赖视图时授予问题
- c++ - 在 qt QFileDialog setsuffix 在 linux 中不起作用,如何解决?
- asp.net - IIS 重写 - 匹配 URL 覆盖
- bash - 为什么将参数从管道传递给函数时,结果会有所不同?
- mysql - 如何通过 R 代码设置 sql 分隔符?
- jenkins - Docker 映像无法在 Jenkins Kubernetes 构建管道中保持活力
- python - 想使用循环按索引添加值