如何将本地文件夹附加到qtquick

时间:2018-01-08 06:50:12

标签: qt qml qqmlcomponent

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

1 个答案:

答案 0 :(得分:0)

使用qmake复制文件

您可以使用qmake将图像文件复制到构建目录,以便应用程序可以找到它们。我目前在我的项目中使用this solution,因为我不想使用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很难使用,所以当它对我有用时,我很高兴。 :)

一旦你能够正常工作,你可以使用this回答来引用文件系统上的图像:

#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的compression options是否有助于执行可执行文件的大小:

  

默认情况下会压缩资源(采用ZIP格式)。它是   可以关闭压缩。如果您的资源,这可能很有用   已包含压缩格式,例如.png文件。你做这个   通过给出-no-compress命令行参数。

rcc -no-compress myresources.qrc
  

rcc还可以控制压缩。你可以指定   压缩级别和要考虑的阈值级别   压缩文件,例如:

rcc -compress 2 -threshold 3 myresources.qrc