首页
学习
活动
专区
圈层
工具
发布

Qt子类
EN

Stack Overflow用户
提问于 2014-12-05 00:23:08
回答 1查看 134关注 0票数 1

我正在学习Qt Echo Plugin示例,并尝试编写复杂的应用程序。我的项目结构如下:

代码语言:javascript
复制
MainDir \
    Main.pro
    kernel \
        kernel.pro
        abstractinterface.h
        main.cpp
    testplugin \
        testplugin.pro
        abstractplugin.h
        abstractplugin.cpp

插件头文件中的问题是:

代码语言:javascript
复制
#include <QObject>
#include <QtPlugin>
#include "abstractinterface.h"

class AbstractPlugin : public QObject, AbstractInterface
// An error appears here
// expected class-name before '{' token
{
    Q_OBJECT
    //... plugin initialization code ...
public:
    explicit AbstractPlugin(QObject *parent = 0);
};

此外,自动完成无法找到类AbstractInterface。

所以,问题是:我做错了什么?在testplugin.pro文件中,我有行INCLUDEPATH += ../kernel/

任何帮助都很感激。

--编辑-编辑

abstractinterface.h

代码语言:javascript
复制
#include <QtPlugin>

#define INTERFACE_ID "AbstractInterface/1.0"

class AbstractInterface
{
public:
    virtual ~AbstractInterface();


    virtual void init();
    virtual void enable();
    virtual void disable();
};

Q_DECLARE_INTERFACE(AbstractInterface, INTERFACE_ID)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 08:04:41

考虑到您粘贴的文件看起来正确且在这里工作,我倾向于认为您的问题是:

代码语言:javascript
复制
INCLUDEPATH += ../kernel/

您可能从主项目文件所在的项目根目录执行qmake,递归地调用qmake以生成Makefile。但是,在生成点,前面提到的路径将从项目根扩展,而不是从子目录扩展。请使用以下方法修复您的testplugin.pro项目文件:

代码语言:javascript
复制
INCLUDEPATH += $$PWD/../kernel/

然而,更好的设计是不要在项目文件中处理它,而是处理头文件所在的其他kernel.pro。更灵活的设计是在其中添加以下内容:

代码语言:javascript
复制
INCLUDEPATH += $$PWD

编辑:根据你的评论,这不是在原来的问题,它似乎你有另一个问题。您似乎在两个不同的文件中混淆了调用相同的包含守卫,这就是为什么第二个包含没有为您提供可访问性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27306743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档