0

我需要在我的 qml 窗口中加载图像。通常我从一个资源文件中加载它,该文件将与我的 .pro 文件一起部署。但由于图像文件夹大小太大,加载时间更长。有什么方法可以使用 qtquick 应用程序部署本地文件夹?以及如何在 qml 文件中引用图像。(图像的路径)。我正在使用 Qt 5.5 版本。

4

1 回答 1

0

使用 qmake 复制文件

您可以使用 qmake 将图像文件复制到构建目录,以便应用程序可以找到它们。我目前在我的项目中使用这个解决方案,因为我不想使用 make install。您应该阅读该答案以理解它,但在这里给出一些上下文:

# using shell_path() to correct path depending on platform
# escaping quotes and backslashes for file paths
copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD\\archive.png)\" \"$$shell_path($$OUT_PWD)\"
first.depends = $(first) copydata
export(first.depends)
export(copydata.commands)
QMAKE_EXTRA_TARGETS += first copydata

正如答案所说,这仅适用于一个文件,因此$(COPY_DIR)如果要复制整个图像目录,则需要使用。这可能不是最好的方法,但是 qmake 很难使用,所以当它对我有用时,我很高兴。:)

完成该工作后,您可以使用答案来引用文件系统上的图像:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

int main(int argc, char *argv[]) {
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("applicationDirPath", QGuiApplication::applicationDirPath());
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec(); }

QML:

Image {
    source: "file:///" + applicationDirPath + "/images/image.png"
}

这将设置一个 QML 上下文属性,该属性指向运行可执行文件的目录,然后使用该目录形成图像的路径。

rcc 的压缩选项

请注意,如果您的大部分或所有图像都是 PNG,您可以查看 rcc 的压缩选项是否有助于提高可执行文件的大小:

资源默认压缩(ZIP 格式)。可以关闭压缩。如果您的资源已经包含压缩格式(例如 .png 文件),这将很有用。您可以通过提供 -no-compress 命令行参数来执行此操作。

rcc -no-compress myresources.qrc

rcc 还可以让您对压缩进行一些控制。您可以指定压缩文件时要考虑的压缩级别和阈值级别,例如:

rcc -compress 2 -threshold 3 myresources.qrc
于 2018-01-08T09:48:35.637 回答