如何在 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();
}
我正在尝试创建一个单独的 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();
}