如何在 QT QML 中创建自己的目录?

How do I make my own directory in QT QML?

我正在尝试创建一个单独的 QML 文件的目录 "All.qml",我可以将它导入到我的项目的任何其他地方,以便我可以访问它的对象(即抽屉)。我在与 "All.qml" 相同的文件夹中制作了一个 qmldir 文件,甚至将该目录添加到 .qrc 文件中。 目录内容如下:

Module App.Drawer

singleton All  1.0 All.qml

但是当我输入

import App.Drawer.   1.0

它说 "module 'App.Drawer' not installed"。我找不到任何其他方式来访问该抽屉,因为项目很大,有多个文件夹和目录。谁能帮我?

此外,该项目还集成了 C++。我尝试去寻找一些文件,其中可能安装了其他目录(还有其他自定义目录,这些目录是预先制作的),但找不到任何文件。

您必须确保 QEngine 可以找到 qmldir 文件,并且它对查找位置有一些特定要求。

首先要让 QEngine 知道 qmldir 文件,您必须添加一个导入路径:

engine.addImportPath("qrc:/");

您的路径可能会有所不同,请继续阅读:

qmldir 文件必须放置在模块名称指定的文件夹结构中。在你的例子中是 <rootPath>/App/Drawer/qmldir。我不知道 "rootPath",但假设您的 qrc 文件中包含以下内容:

<RCC>
    <qresource prefix="/ProjectX/App/Drawer">
        <file>Drawer.qml</file>
        <file>qmldir</file>
    </qresource>
</RCC>

那么 "rootPath" 就是 qrc:/ProjectX 导入调用变成:

engine.addImportPath("qrc:/ProjectX");

此外,qmldir中的module声明应该与放置qmldir文件的文件夹结构相同。 (而且我觉得应该是小写)

module App.Drawer

singleton Drawer 1.0 Drawer.qml

如果您希望 Qt Creator 也找到这些内容,您可以使用 QML2_IMPORT_PATH 环境变量并使用相同的逻辑将其设置到正确的文件夹。

您也可以将文件放在 <Qt_installation_folder>/qml/App/Drawer 中,但这意味着每个项目都可以使用它,并且您必须在开发过程中保持它是最新的,这可能有点过头了。


编辑

要查看您的文件是否排列正确,您可以添加此调试代码:

QDirIterator it(":", QDirIterator::Subdirectories);
while (it.hasNext()) {
    qDebug() << it.next();
}