Qt资源中QML文件的“找不到文件”错误

File not found error for a QML file inside a Qt resource

本文关键字:文件 找不到 找不到文件 错误 资源 QML Qt      更新时间:2023-10-16

.pro

# Add more folders to ship with the application, here
folder_01.source = qml/qmlDeploy
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01
TEMPLATE += app
QT += qml
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
# Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()
RESOURCES += 
    resource.qrc

main.cpp

#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQuickView view;
    //view.setSource(QUrl::fromLocalFile("qml/qmlDeploy/main.qml"));
    view.setSource (QUrl::fromLocalFile("qrc:/main.qml"));
    view.show();
    return app.exec();
}

resource.qrc

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/">
    <file>qml/qmlDeploy/main.qml</file>
</qresource>
</RCC>

main.qml

import QtQuick 2.0
Rectangle { width: 100; height: 100; color: "red" }

问题说明:

当我使用QtCreator编译上述程序时,会显示以下错误:
错误:

file:///home/ppp/documents/test/build-qmlDeploy-Desktop_Qt_5_1_0_GCC_64bit-Debug/qrc:/main.qml: File not found

QUrl::fromLocalFile ()根本不打算与Qt Resource一起使用,因为显然资源捆绑包是not本地文件,而且QML文件不在Qt资源文件的根目录下,所以您必须在它之前添加路径:所以只需使用QUrl ("qrc:/qml/qmlDeploy/main.qml")

PS:如果你想避免像这样的长路径,只需将.qrc文件移动到与QML文件相同的目录中,你就会有更短的URL

我认为问题出在这一行:

view.setSource (QUrl::fromLocalFile("qrc:/main.qml"));

您的URL语法不正确。您正试图打开qrc:目录中的一个文件。

应该是这样的:

view.setSource (QUrl("qrc:///qml/qmlDeploy/main.qml"));

因为qrc://是URL前缀,/是根前缀,而main.qml是其中的文件