Qt QML包含来自不同目录的问题

Qt QML包含来自不同目录的问题,qt,qml,qt5,Qt,Qml,Qt5,我的QML文件有这样的目录结构: qml.qrc main.qml LockScreen/ LockScreen.qml QuickMenu/ QuickMenu.qml misc/ KeyboardInput.qml (我已经排除了其他文件,但这并不相关) 我已将上述所有文件添加到我的qrc文件中,每个目录都有前缀: <RCC> <qresource prefix="/"> <file>main.qml</file

我的QML文件有这样的目录结构:

qml.qrc
main.qml
LockScreen/
  LockScreen.qml
QuickMenu/
  QuickMenu.qml
misc/
  KeyboardInput.qml
(我已经排除了其他文件,但这并不相关)

我已将上述所有文件添加到我的qrc文件中,每个目录都有前缀:

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>qtquickcontrols2.conf</file>
        <file>MessagePopup.qml</file>
        <file>MessagePopupForm.ui.qml</file>
    </qresource>
    <qresource prefix="/LockScreen">
        <file>LockScreen/LockScreen.qml</file>
        <file>LockScreen/fingerprint.png</file>
        <file>LockScreen/fingerprint_highlighted.png</file>
    </qresource>
    <qresource prefix="/MainPages">
        <file>MainPages/LibraryPage.qml</file>
        <file>MainPages/CameraPage.qml</file>
        <file>MainPages/MessagesPage.qml</file>
        <file>MainPages/HomePage.qml</file>
        <file>MainPages/saturn.jpg</file>
    </qresource>
    <qresource prefix="/QuickMenu">
        <file>QuickMenu/QuickMenu.qml</file>
    </qresource>
    <qresource prefix="/misc">
        <file>misc/KeyboardInput.qml</file>
    </qresource>
</RCC>
在main.qml中,我得到一个错误,说我的一个qml对象不是类型

QQmlApplicationEngine failed to load component
qrc:/main.qml:67 LockScreen is not a type

奇怪的是,我可以使用QtCreator的intellisense访问我的所有对象,在我构建并运行应用程序之前,一切似乎都导入得很好。有没有办法让qrc路径过时?还是旧缓存文件?

该问题是由前缀引起的,该前缀似乎在路径中添加了一个级别,因此在您的情况下,导入应该是:

import "./LockScreen/LockScreen"
尽管编辑器会丢失自动完成并抛出警告。因此,问题似乎出在解释qresource别名时遇到问题的编辑身上


更好的选择是为.qml文件使用别名:

...
<qresource prefix="/LockScreen">
    <file alias="LockScreen.qml">LockScreen/LockScreen.qml</file>
    ...

注意:别名必须具有.qml扩展名,否则Qt Creator将无法正确识别它

别名工作正常,但我不明白为什么导入时无法识别默认文件名?这是否意味着我必须为qrc中的每个文件指定一个别名?@AndrewLoomis前缀为路径增加了一个级别,并且当存在多个级别时,Qt Creator似乎无法识别属性。是的,如果你想使用前缀,你必须设置一个别名,如果你删除它们,你就不会有这个问题
...
<qresource prefix="/LockScreen">
    <file alias="LockScreen.qml">LockScreen/LockScreen.qml</file>
    ...
import "LockScreen"

LockScreen{
    // ...
}