QML + .qrc:将图像保存在另一个前缀下
QML + .qrc: Keeping images under another prefix
我的问题与 another Whosebug discussion 中讨论的问题类似,我可以让我的代码以这种方式工作。但是,我对该解决方案并不完全满意。最初,我的 .qml 文件位于一个前缀(“/”)下,图像位于另一个前缀(“/images”)下。不弃此别,不取程序运行。
有没有什么(简单的)方法可以在带有 .qrc 资源文件的 QML 项目中使用不同的前缀?
与其问,我应该去喝杯咖啡或做些运动。这是一个令人尴尬的初学者问题。不过,可能还有像我这样的人...
我的 QtQuick 应用程序基本上由一个 C++ 源文件 main.cpp、一个资源文件 qml.qrc 和一个图像 foo.png.
源文件(所示代码由QtCreator自动生成):
//main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}
带有图像附加前缀的资源文件:
//qml.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/images">
<file>images/foo.png</file>
</qresource>
</RCC>
一个qml文件,我想在其中导入图片:
//main.qml
import QtQuick 2.2
import QtQuick.Window 2.0
Window {
visible: true
Image {
source: ???
}
}
我的问题是我不知道在 .qml 文件中写什么而不是 ???。要导入图形,你需要写 "/images/images/foo.png",但我的想法反对写两次 /images .
谢谢。
如果您想根据实际文件夹名称按前缀对文件进行分组而不加长引用名称,那么为什么不使用 alias
关键字?
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/images">
<file alias="foo.png">images/foo.png</file>
</qresource>
</RCC>
这将删除导致混淆的额外间接寻址,即您可以使用 :/images/foo.png
而不是 :/images/images/foo.png
访问它
Qt 文档中提供了解释和更多示例(搜索 "alias"):http://doc.qt.io/qt-5/resources.html
您必须输入路径 "qrc:/images/images/foo.png"
而不是 ???
示例:
//main.qml
import QtQuick 2.2
import QtQuick.Window 2.0
Window {
visible: true
Image {
source: "qrc:/images/images/foo.png"
}
}
在您的情况下,您可以按如下方式在资源文件中定义文件,而不是将 "images" 写成两次作为源路径:
<file alias="foo.png">images/foo.png</file>
那么您只能使用"images"一次。
Window {
visible: true
Image {
source: "qrc:/images/foo.png"
}
}
我的问题与 another Whosebug discussion 中讨论的问题类似,我可以让我的代码以这种方式工作。但是,我对该解决方案并不完全满意。最初,我的 .qml 文件位于一个前缀(“/”)下,图像位于另一个前缀(“/images”)下。不弃此别,不取程序运行。
有没有什么(简单的)方法可以在带有 .qrc 资源文件的 QML 项目中使用不同的前缀?
与其问,我应该去喝杯咖啡或做些运动。这是一个令人尴尬的初学者问题。不过,可能还有像我这样的人...
我的 QtQuick 应用程序基本上由一个 C++ 源文件 main.cpp、一个资源文件 qml.qrc 和一个图像 foo.png.
源文件(所示代码由QtCreator自动生成):
//main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}
带有图像附加前缀的资源文件:
//qml.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/images">
<file>images/foo.png</file>
</qresource>
</RCC>
一个qml文件,我想在其中导入图片:
//main.qml
import QtQuick 2.2
import QtQuick.Window 2.0
Window {
visible: true
Image {
source: ???
}
}
我的问题是我不知道在 .qml 文件中写什么而不是 ???。要导入图形,你需要写 "/images/images/foo.png",但我的想法反对写两次 /images .
谢谢。
如果您想根据实际文件夹名称按前缀对文件进行分组而不加长引用名称,那么为什么不使用 alias
关键字?
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/images">
<file alias="foo.png">images/foo.png</file>
</qresource>
</RCC>
这将删除导致混淆的额外间接寻址,即您可以使用 :/images/foo.png
而不是 :/images/images/foo.png
Qt 文档中提供了解释和更多示例(搜索 "alias"):http://doc.qt.io/qt-5/resources.html
您必须输入路径 "qrc:/images/images/foo.png"
而不是 ???示例:
//main.qml
import QtQuick 2.2
import QtQuick.Window 2.0
Window {
visible: true
Image {
source: "qrc:/images/images/foo.png"
}
}
在您的情况下,您可以按如下方式在资源文件中定义文件,而不是将 "images" 写成两次作为源路径:
<file alias="foo.png">images/foo.png</file>
那么您只能使用"images"一次。
Window {
visible: true
Image {
source: "qrc:/images/foo.png"
}
}