【问题标题】:How do I make my own directory in QT QML?如何在 QT QML 中创建自己的目录?
【发布时间】:2020-05-28 17:06:27
【问题描述】:

我正在尝试创建一个单独的 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】:

    您必须确保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 环境变量并使用相同的逻辑将其设置到正确的文件夹中。

    您也可以将文件放在&lt;Qt_installation_folder&gt;/qml/App/Drawer 中,但这意味着每个项目都可以使用它,并且您必须在开发过程中使其保持最新状态,这可能有些过头了。


    编辑

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

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

    【讨论】:

    • 我在哪里写这个命令? engine.addImportPath() 一个?在 qmldir 文件中?还是我要导入的文件?
    • 在你实例化QEngine之后,可能是main.cpp,在调用qengine.load('qrc:/main.qml')(或类似的)之前
    • 表示将根文件夹(“/ProjectX”)标识为导入路径之一,但还是找不到模块。我希望这有助于找出问题所在。我是否必须使用某些特定的扩展名保存 qmldir?
    • 您能否执行我在 main.cpp 中添加的调试代码并发布输出,如果它还不能帮助找到问题。如果您发布更多关于项目设置(.pro 文件、.qrc 文件)的信息,也可能会有所帮助。 qmldir 文件名就是这样,没有扩展名
    • 好的,我执行了你添加的代码,这是控制台的输出。 “QML 调试已启用。仅在安全环境中使用。”随后是 .qrc 文件中引用的所有图像/qml 文件/文件等。文件列表还包括此输出中的我的 qmldir 文件以及“Drawer.qml”文件。但问题仍然存在。它仍然说找不到模块。即使它显然正在通过该文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多