【发布时间】:2021-11-16 22:54:01
【问题描述】:
我目前正在研究与 QML 的 c++ 集成,到目前为止一切正常。我让我的后端类暴露并工作。现在我扩展了我的应用程序,我想将我的 c++ 后端拆分为子文件夹,以便更好地了解项目。现在我遇到了无法再找到这些子文件夹中的后端文件的链接问题。由于我正在使用一些需要特定编译器的库,因此我使用的是 MSVC 16,它会引发以下错误:
Cannot open include file: 'loginstate.h': No such file or directory.
解析工作正常,QtCreator 不会将包含标记为错误。
在构建时,它会创建一个名为 application.metatypes.json 的文件。在所述文件中,存储了有关公开类的所有信息。通读它时,我发现 loginstates.h 应该在根目录中,而实际上它不在根目录中,它位于根目录的子文件夹中。当我手动将其更改为正确的文件夹时,我的应用程序就会运行。
有没有办法让 qmake/moc 为子文件夹中的类生成正确的路径?我缺少什么设置?
.pro 文件:
QT = core quick serialport network virtualkeyboard
TEMPLATE = app
CONFIG += qt c++17 warn_on qmltypes
CONFIG -= debug_and_release debug_and_release_target
SOURCES += \
main.cpp \
datetimebackend.cpp \
footerbackend.cpp \
labelbuttonbackend.cpp \
globaluisettings.cpp \
headerbackend.cpp \
scannerbuttonbackend.cpp \
sidebarbackend.cpp
HEADERS += \
businessLogic/loginstate.h \
datetimebackend.h \
footerbackend.h \
globaluisettings.h \
headerbackend.h \
labelbuttonbackend.h \
scannerbuttonbackend.h \
sidebarbackend.h
RESOURCES += qml.qrc
RC_ICONS = ./images/icon.ico
INCLUDEPATH += $$PWD/..
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH += $$PWD
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
QML_IMPORT_NAME = Backend
QML_IMPORT_MAJOR_VERSION = 1
DISTFILES += some qml files
【问题讨论】:
-
它只是“无法打开包含文件”,与QML无关。意识到如何使用 INCLUDEPATH 中的头文件来引用该目录,现在有什么 ($PWD) 不是通常要做的事情。最好使用 CMAKE 快捷方式:stackoverflow.com/questions/15392561/cmake-include-path,并且您创建的每个目录都包含从某个根目录列出的包含。
-
我正在使用 qmake 来生成我的 makefile,所以我无法直接访问它是如何完成的。该包含的目的是将我的 subdir 项目的所有子项目包含到我的主应用程序中 - 这也是一个子项目。它使#include 语句看起来更干净