从 QML 中的子文件夹集成 C++ class

Integrating C++ class from subfolder in QML

我目前正在研究与 QML 的 C++ 集成,到目前为止一切正常。我让我的后端 类 暴露并工作。现在我扩展了我的应用程序,我想将我的 C++ 后端拆分为子文件夹,以便更好地了解项目概览。现在我 运行 陷入链接问题,这些子文件夹中的后端文件再也找不到了。因为我使用的是一些需要特定编译器的库,所以我使用的是 MSVC 16,它会抛出以下错误:

Cannot open include file: 'loginstate.h': No such file or directory. 

解析工作正常,QtCreator 没有将包含标记为错误。

构建时,它会创建一个名为 application.metatypes.json 的文件。在所述文件中,存储了有关暴露的 类 的所有信息。看的时候发现loginstates.h应该在根目录下,其实不在,在root的子文件夹里。当我手动将其更改为正确的文件夹时,我的应用程序运行。

有没有办法让 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

你得到这些错误只是因为一些头文件不在路径中并且编译器找不到它们。正如您所说,您重组了目录模板,您只需要向 .pro 文件中的 INCLUDEPATH 参数添加适当的包含路径,例如:

INCLUDEPATH += $$PWD/new/include/path

对每个包含编译器未找到的 .h 文件的目录执行此操作。