如何在QT QML中制作自己的目录?

问题描述 投票:0回答:1

我想把一个单独的QML文件 "All.qml "做成一个目录,我可以把它导入到我的项目中的任何地方,这样我就可以访问它的对象(即抽屉)。我做了一个qmldir文件,和 "All.qml "在同一个文件夹里,甚至还把这个目录添加到了.qrc文件里。这个目录的内容如下。

Module App.Drawer

singleton All  1.0 All.qml

但当我输入...

import App.Drawer.   1.0

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

另外,这个项目集成了C++。我试着去找一些文件,也许其他的目录(还有其他的自定义目录,是事先做好的)已经安装好了,但是找不到。

qt qml qt-creator importerror qtquick2
1个回答
0
投票

你必须确保 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");

另外, module 声明中 qmldir 的文件夹结构应该与该文件夹中的 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();
}
© www.soinside.com 2019 - 2024. All rights reserved.