Qt无法设置所需的头文件?

时间:2015-09-23 16:41:34

标签: qt

我正在尝试为已创建的库创建一个GUI应用程序,该应用程序位于GUI应用程序文件夹以外的其他位置。
层次结构如下:

Main project 
     Main Project
      <sources>
     Qt Project
        GUIAPP 

并且.pro文件配置如下:

#-------------------------------------------------
#
# Project created by QtCreator 2015-09-18T10:56:00
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

TARGET = Ann_network
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    qcustomplot.cpp \
    ../../ArtificialNeuralNetworksProject/Layer.cpp \
    ../../ArtificialNeuralNetworksProject/Matrix.cpp \
    ../../ArtificialNeuralNetworksProject/Network.cpp \
    ../../ArtificialNeuralNetworksProject/Neuron.cpp

HEADERS  += mainwindow.h \
    qcustomplot.h \
    ../../ArtificialNeuralNetworksProject/Layer.h \
    ../../ArtificialNeuralNetworksProject/Matrix.h \
    ../../ArtificialNeuralNetworksProject/Network.h \
    ../../ArtificialNeuralNetworksProject/Neuron.h

FORMS    += mainwindow.ui

这就是项目文件的外观: enter image description here

然而,当我尝试编译源代码时,它会收到错误:

:-1: error: dependent '..\..\..\Artificial Neural Networks Project\Neuron.h' does not exist.  

我需要说的是,在代码中没有使用上面的字符串。
我使用指令命令的唯一地方是mainwindow.cpp(GUI apps sourcecode),如下所示:

#include "../../ArtificialNeuralNetworksProject/Neuron.h"
#include "../../ArtificialNeuralNetworksProject/Layer.h"
#include "../../ArtificialNeuralNetworksProject/Network.h"

这是什么问题?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您似乎尚未正确配置* .pro文件。您说您正在尝试包含已编码的库。

但是您在代码中包含了此库的源代码和标题,因此它并不是一个独立的库。你知道吗?我想明确这一点,因为我不知道它是否与你相关。在我看来,构建DLL并在GUI中包含标题是正确的方法。但是,如果您没有足够的依赖经验,那么将您的库复制/粘贴到项目中会更容易。

话虽这么说,我建议移动你的文件夹&#39; ArtificialNeuralNetworksProject&#39;在* .pro文件的同一级别,并将其更改为:

HEADERS  += mainwindow.h \
    qcustomplot.h \
    ArtificialNeuralNetworksProject/Layer.h \
    ...

SOURCES相同。您应该阅读QMAKE的文档:http://doc.qt.io/qt-5/qmake-variable-reference.html#includepath

  

INCLUDEPATH

     

指定编译项目时应搜索的#include目录。

如果您不想更改文件系统上的文件夹,总会有一个解决方案。但是,让依赖文件不在其他源代码所在的目录中对我来说似乎不正常。

ArtificialNeural = C:/Users/<you>/<some path>/ArtificialNeuralNetworksProject/

INCLUDEPATH += $$PWD
INCLUDEPATH += $$ArtificialNeural

编辑:所以如果您计划制作一个或多个DLL,那么您可以执行以下项目结构:

Project
   ├─────LibA
   ├─────LibB
   └─────MainGUI

<强> Project.pro:

TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += LibA \
    LibB \
    MainGUI

LibA.pro 和LibB.pro等等:

DEFINES += LIB_A
TEMPLATE = lib

<强> MainGUI.pro:

TEMPLATE = app
LIBS += -L$$OUT_PWD/../LibA/ -lLibA -L$$OUT_PWD/../LibB/ -lLibB 
( or -L$$OUT_PWD/../LibA/{debug|release}/ )

INCLUDEPATH += $$PWD/../LibA $$PWD/../LibB
DEPENDPATH += $$PWD/../LibA $$PWD/../LibB

对于MSVC,您必须明确处理导入/导出的符号。因此,在您要编写的每个共享库中,创建一个小标题:

<强> lib_a_global.h:

#ifndef LIBRARY_GLOBAL_H
#define LIBRARY_GLOBAL_H

#if defined(A_LIBRARY)
#undef A_LIBRARY
#define A_LIBRARY Q_DECL_EXPORT
#else
#define A_LIBRARY Q_DECL_IMPORT
#endif

#endif // LIBRARY_GLOBAL_H

在每个LibA类中,添加A_LIBRARY。例如,在&#34; neuralnetwork.h&#34;:

#ifndef NEURALNETWORK_H
#define NEURALNETWORK_H
#include "lib_a_global.h"

class A_LIBRARY NeuralNetwok {
 public:
   // etc
}

#endif // NEURALNETWORK_H

最后,您可以在GUI中使用库,只需包含所需的文件即可。如果你在GUI中想要实现NeuralNetwork类,那么:

#include <neuralnetwork.h>

   // ...
NeuralNetwork *nn = new NeuralNetwork(this);
nn->awesomeMethod();