簡體   English   中英

遷移到Qt5時無法在子目錄中找到頭文件

[英]Unable to locate the header files inside subdirectories while migrating to Qt5

我最近從Qt 4.8.5遷移到Qt 5.3.0,這些是相關的信息:

  • Windows 7 32位
  • Qt 3.1.1
  • MSVC 2010編譯器(我的Qt版本都是MSVC2010版的預編譯軟件包)
  • Win7 SDK中的調試器

現在,我被一個不斷出現編譯錯誤的問題所困:

嚴重錯誤C1083:無法打開包含文件

從子目錄中的那些頭文件中獲取,例如, #include "FooFolder/bar.h" 編譯器無法找到所有此類標頭,而我完全感到困惑,因為:

  1. 智能感知效果很好。
  2. 如果我改回舊版工具箱Qt 4.8.5,則編譯正常
  3. 兩種套件都使用相同的MSVC編譯器。

這是我的.pro文件:

QT += core gui script
QT += printsupport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = MyApp
TEMPLATE = app

SOURCES += main.cpp\
        mainwindow.cpp \
    qcustomplot.cpp \
    dialogs/filterdialog.cpp \
    databox/databox.cpp \
    databox/datom.cpp \
    #... and more FooFolder/bar.cpp

HEADERS  += mainwindow.h \
    qcustomplot.h \
    dialogs/filterdialog.h \
    databox/databox.h \
    databox/datom.h \
    #... and more FooFolder/bar.h        

RESOURCES += \
    resources.qrc

win32: LIBS += -LC:/ADLINK/UDASK/lib/ -lusb-dask \    
INCLUDEPATH += C:/ADLINK/UDASK/include \
DEPENDPATH += C:/ADLINK/UDASK/include \

include(qext/qextserialport.pri)

這是.h文件之一,該文件包含其他子目錄頭

#ifndef SETWINDOW_H
#define SETWINDOW_H
#include <QObject>
#include "databox/databox.h" // <---fatal error C1083: Cannot open include file 

class SetWindow: public QObject
{
    Q_OBJECT

public:
    SetWindow();

public Q_SLOTS:
    void setPointNum(int n);
    void setStepSize(int s);    
    int getPointNum();
    int getStepSize();
    void requestSignal();

Q_SIGNALS:
    void sendParameters(int p, int s);

private:
    QString DynamicString;
    DataBox *presentData;

    int m_PointNum;
    int m_StepSize;
};

#endif // SETWINDOW_H

並且頭文件未能包含:

#ifndef DATABOX_H
#define DATABOX_H
#include <QVector>
#include <QFile>
#include <QMap>
#include <QString>
#include "datom.h"

class Measurement
{
public:
    Measurement();
    void setNumChan(int n);
    void setADRange(QString &s);
    void setSamplingRate(int n);
    void setTimeBase(double d);

    int NumChan;
    QString ADRange;
    int SamplingRate;
    double TimeBase;
};

class DataBox
{    
public:
    DataBox();

    void setCurrentFile(QString path);
    void loadData();
    void cleanAll();    

    QVector<double>* py_0;    
    QVector<double>* py_1;
    QVector<double>* ptimeStamp;
    QVector<double>* pi_M;
    QVector<double>* py_M;
    QVector<double>* py_W;

    QMap<double, double> AI_0;
    QMap<double, double> AI_1;
    QMap<int, double> AI0;
    QMap<int, double> AI1;

    double timeBase;

    Measurement parameters;
    QVector<Datom> *dataPoints;

private:
    QString currentFile;
};

#endif // DATABOX_H

這些似乎是不正確的:

win32: LIBS += -LC:/ADLINK/UDASK/lib/ -lusb-dask \

INCLUDEPATH += C:/ADLINK/UDASK/include \
DEPENDPATH += C:/ADLINK/UDASK/include \

1) \\表示它加入了您不希望的下一行。 對於后面跟有空行的行來說,這不是問題,但是對於這里的INCLUDEPATH ,這並不是一件好事,而且如果您將空行替換為某些包含項,那么其他行也可能會遇到問題。

2)您還需要將$$PWD放入includepath中,以“注冊”項目根目錄,因為您的include應該從此處開始,而不是源的當前工作目錄,因為這不是您可以假定的正確途徑。

因此,您將編寫如下內容:

win32: LIBS += -LC:/ADLINK/UDASK/lib/ -lusb-dask

INCLUDEPATH += $$PWD C:/ADLINK/UDASK/include
DEPENDPATH += C:/ADLINK/UDASK/include

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM