从 QRC 文件加载 qmldir

Posted

技术标签:

【中文标题】从 QRC 文件加载 qmldir【英文标题】:Load qmldir from QRC file 【发布时间】:2015-07-30 14:20:04 【问题描述】:

我正在尝试在 Qt 快速应用程序中使用 QML-material library。

但是当我尝试使用导入代码时,它说

模块“材料”未安装`

导入材料 0.1

我也试过这个,但似乎不起作用:

导入“模块/材料”作为材料

qml.qrc 看起来像这样,所有qmldir 文件都列出来了:

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>modules/Material/qmldir</file>
        <file>modules/Material/Extras/qmldir</file>
        <file>modules/Material/ListItems/qmldir</file>
        <file>modules/QtQuick/Controls/Styles/Material/qmldir</file>
    </qresource>
</RCC>

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.addImportPath("qrc:/");
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();

是否有我遗漏的东西或者无法在qrc 文件中使用qmldir

【问题讨论】:

你试过engine.addImportPath("qrc:/modules/"); 吗? @GrecKo 是的,但后来我得到了qrc:///modules/Material/[Name of component].qml:-1 File not found,忘记提了。 我认为您需要将每个文件夹和文件添加到 qrc,而不仅仅是 qmldirs @GrecKo 可以,谢谢。 @GrecKo 请提供问题的答案。 【参考方案1】:

您需要将模块所在的文件夹添加到导入路径中。

在这种情况下,它是qrc:/modules/

例子:

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

要使模块正常工作,您需要访问qmldir 文件,以及其中引用的所有文件。所以你需要将库的所有文件添加到qrc中。

【讨论】:

对于安装为带有.pri 文件的git 子模块的未修改qml-material,您只需添加:engine.addImportPath( "qrc:///" );

以上是关于从 QRC 文件加载 qmldir的主要内容,如果未能解决你的问题,请参考以下文章

qrc资源文件加载后,裸机环境下图片不显示

QML 错误:qrc:/Main.qml:24 模块“系统”未安装

PyQt5——加载资源文件

QML导入模块

qt资源加载出错

QT UI 转换为 python,但图像不会加载