从资源文件导入 QML 模块
Import QML module from resource file
以下项目结构正在导入 qml 模块:
项目结构
Project
|- modules
|- Goofy
|- qmldir
|- Donald.qml
|- project.pro
|- main.cpp
|- main.qml
|- qml.qrc
project.pro
QT += quick
SOURCES += \
main.cpp
RESOURCES += \
modules/Goofy/Donald.qml \
modules/Goofy/qmldir \
qml.qrc
QML_IMPORT_PATH = $$PWD/modules
QML_DESIGNER_IMPORT_PATH = $$PWD/modules
main.cpp
QQmlApplicationEngine engine;
engine.addImportPath("qrc:/modules");
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import Goofy 1.0
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Donald{}
}
qmldir
module Goofy
Donald 1.0 Donald.qml
我应该如何修改我的项目以从 qrc 文件导入模块,而不是将任何单个文件添加到资源?
理想情况下,我想要以下 pro 文件:
project.pro
QT += quick
SOURCES += \
main.cpp
RESOURCES += \
modules/Goofy/goofy.qrc \
qml.qrc
QML_IMPORT_PATH = $$PWD/modules
QML_DESIGNER_IMPORT_PATH = $$PWD/modules
我尝试将 goofy.qrc(或 Goofy.qrc)添加到我的 modules/Goofy 文件夹,格式如下:
<RCC>
<qresource prefix="/">
<file>qmldir</file>
<file>Donald.qml</file>
</qresource>
</RCC>
但它不起作用。我该怎么办?
您的 Goofy.rcc 不起作用,因为文件不在使用的 importPath 中。这些文件在 qrc 旁边,因此没有相对路径添加到指定的前缀。将 rcc 更改为以下内容以使其工作:
<RCC>
<qresource prefix="/modules/Goofy">
<file>qmldir</file>
<file>Donald.qml</file>
</qresource>
</RCC>
您似乎已经明白,qmldir 文件需要位于 Goofy
路径中,QmlEngine 才能接受它。将其添加到指定的导入路径,QmlEngine 将找到您的模块,就像它在磁盘上一样(因为 qrc 实际上呈现为普通文件系统)
顺便说一句,您可以使用以下代码片段检查相对 qrc 路径的工作情况:
QDirIterator qrc(":", QDirIterator::Subdirectories);
while(qrc.hasNext())
{
qDebug() << qrc.next();
}
以下项目结构正在导入 qml 模块:
项目结构
Project
|- modules
|- Goofy
|- qmldir
|- Donald.qml
|- project.pro
|- main.cpp
|- main.qml
|- qml.qrc
project.pro
QT += quick
SOURCES += \
main.cpp
RESOURCES += \
modules/Goofy/Donald.qml \
modules/Goofy/qmldir \
qml.qrc
QML_IMPORT_PATH = $$PWD/modules
QML_DESIGNER_IMPORT_PATH = $$PWD/modules
main.cpp
QQmlApplicationEngine engine;
engine.addImportPath("qrc:/modules");
main.qml
import QtQuick 2.15
import QtQuick.Window 2.15
import Goofy 1.0
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Donald{}
}
qmldir
module Goofy
Donald 1.0 Donald.qml
我应该如何修改我的项目以从 qrc 文件导入模块,而不是将任何单个文件添加到资源?
理想情况下,我想要以下 pro 文件:
project.pro
QT += quick
SOURCES += \
main.cpp
RESOURCES += \
modules/Goofy/goofy.qrc \
qml.qrc
QML_IMPORT_PATH = $$PWD/modules
QML_DESIGNER_IMPORT_PATH = $$PWD/modules
我尝试将 goofy.qrc(或 Goofy.qrc)添加到我的 modules/Goofy 文件夹,格式如下:
<RCC>
<qresource prefix="/">
<file>qmldir</file>
<file>Donald.qml</file>
</qresource>
</RCC>
但它不起作用。我该怎么办?
您的 Goofy.rcc 不起作用,因为文件不在使用的 importPath 中。这些文件在 qrc 旁边,因此没有相对路径添加到指定的前缀。将 rcc 更改为以下内容以使其工作:
<RCC>
<qresource prefix="/modules/Goofy">
<file>qmldir</file>
<file>Donald.qml</file>
</qresource>
</RCC>
您似乎已经明白,qmldir 文件需要位于 Goofy
路径中,QmlEngine 才能接受它。将其添加到指定的导入路径,QmlEngine 将找到您的模块,就像它在磁盘上一样(因为 qrc 实际上呈现为普通文件系统)
顺便说一句,您可以使用以下代码片段检查相对 qrc 路径的工作情况:
QDirIterator qrc(":", QDirIterator::Subdirectories);
while(qrc.hasNext())
{
qDebug() << qrc.next();
}