首页 > 解决方案 > 如何在 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 类?

标签: c++qt

解决方案


插件应该独立于主应用程序,因此您不能使用其中定义的类。您的构建错误可能是因为在插件构建期间未编译 shareddata.cpp。

如果你真的想使用这样的设计,我建议为SharedData.

INCLUDEPATH只说您可以使用共享数据的标头。问题出现在链接阶段。


推荐阅读