Qt中的子模板

时间:2010-10-05 16:35:57

标签: c++ qt

我正在尝试创建如下的项目结构

test/
test.pro
build/
  build.pro
  main.cpp
gui/
  gui.pro
  mainwindow.h
  mainwindow.cpp

我的 test.pro 如下所示:

TEMPLATE = subdirs
SUBDIRS = gui
CONFIG += ordered
SUBDIRS +=build

build.pro

TEMPLATE = app
QT += core gui
SOURCES += main.cpp
LIBS += -L../gui

gui.pro

TEMPLATE  = lib

SOURCES += \
   mainwindow.cpp

HEADERS  += \
   mainwindow.h

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(){}

MainWindow::~MainWindow(){}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
   public:
     MainWindow();
     ~MainWindow();
 };

 #endif // MAINWINDOW_H

的main.cpp

#include <QApplication>
#include "gui/mainwindow.h" //error

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MainWindow w;
    //w.show();
    return a.exec();
}

我在编译期间遇到错误:

../../test/build/main.cpp:2:25: error: gui/gui.h: No such file or directory

我做错了什么?


谢谢布鲁诺。 我换了一行:

#include "gui/mainwindow.h"

#include "../gui/mainwindow.h"

但现在我有如下错误:

undefined reference to `MainWindow::MainWindow()' 
undefined reference to `MainWindow::~MainWindow()'

我的 mainwindow.cpp 文件如下所示:

#include "mainwindow.h"

MainWindow::MainWindow()
{}

MainWindow::~MainWindow()
{}

我应该如何将 mainwindow.h 文件添加到 mainwindow.cpp ??

4 个答案:

答案 0 :(得分:2)

当我将 build.pro 文件更改为:

TEMPLATE = app
QT += core gui

SOURCES += main.cpp

LIBS += -L../gui/debug -lgui

申请已退出,代码为-1073741515。

也许 libs 部分的路径错了?

qt:

生成的文件树下面
test/
  test.pro
  build/
    build.pro
    main.cpp
  gui/
    gui.pro
    mainwindow.h
    mainwindow.cpp

test-build-desktop/
  Makefile
  build/
    debug/
    release/
    Makefile
    Makefile.Debug
    Makefile.Release
  gui/
    debug/
      gui.dll
      libgui.a
      mainwindow.o
    release/
    Makefile
    Makefile.Debug
    Makefile.Release

我通过 Dependency Walker 检查了exe文件: LINK to image

答案 1 :(得分:0)

test/
test.pro
build/
  build.pro
  main.cpp
gui/
  gui.pro
  mainwindow.h
  mainwindow.cpp

gui.h目录中没有名为gui的文件 - 导致错误。

修改

您可能希望gui/mainwindow.h加入吗?

答案 2 :(得分:0)

  

错误:gui / gui.h:没有这样的文件或目录

那是因为该目录中没有这样的文件。 :)

该目录中只有3个文件   gui.pro   mainwindow.h和   mainwindow.cpp

我想你想要加入"gui/mainwindow.h",对吧?

答案 3 :(得分:0)

  

我不知道我做错了什么?   当我发表评论时#include   “gui / mainwindow.h”然后一切都是   行。

我认为问题出在你的include指令中。 尝试将其更改为

#include "../gui/mainwindow.h"
  

预处理器找到时   #include指令它用指定的整个内容替换它   文件。指定a有两种方法   要包含的文件:

     

#include "file"   #include <file>

     

两者之间的唯一区别   表达是地方   (目录)编译器所在的位置   去寻找文件。在里面   第一种情况,文件名是   双引号之间指定的   首先在同一个文件中搜索   包含该文件的目录   包含该指令。万一   它不在那里,编译器搜索   默认目录中的文件   它被配置为寻找的地方   标准头文件。如果是文件   名称包含在之间   角括号&lt;&gt;搜索文件   直接在编译器的位置   配置为寻找标准   头文件。因此,标准   头文件通常包含在   角括号,而其他具体   头文件包含使用   引号。

http://msdn.microsoft.com/en-us/library/36k2cdd4%28VS.80%29.aspx

编辑:

现在针对未定义的引用错误。 您需要更改build.pro文件。

变化:

LIBS += -L../gui 

类似

LIBS += -L../gui/debug -lgui

(路径../gui/debug对我有用,因为这是lib“gui”所在的地方)

这个想法是你必须将库所在的目录与库名分开(没有扩展名,没有任何'lib'前缀)。

在此处查看此问题: Adding external library into Qt Creator project