我想把一个单独的QML文件 "All.qml "做成一个目录,我可以把它导入到我的项目中的任何地方,这样我就可以访问它的对象(即抽屉)。我做了一个qmldir文件,和 "All.qml "在同一个文件夹里,甚至还把这个目录添加到了.qrc文件里。这个目录的内容如下。
Module App.Drawer
singleton All 1.0 All.qml
但当我输入...
import App.Drawer. 1.0
它说 "模块'App.Drawer'未安装"。我找不到任何其他方法来访问该抽屉,因为项目很大,有多个文件夹和目录。谁能帮帮我?
另外,这个项目集成了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");
另外, 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();
}