【问题标题】:CMake, QT Quick & Visual Studio: "qrc:/main.qml:-1 File not found"CMake、QT Quick 和 Visual Studio:“qrc:/main.qml:-1 文件未找到”
【发布时间】:2017-06-06 09:47:25
【问题描述】:

我正在尝试将QT Quick (QML) 与Visual Studio 2015CMake 一起使用。我从一个示例“QT Quick Controls - Gallery”开始,并将其转移到 CMake。它在 QT Creator(使用 Visual Studio 的编译器)中运行良好,但在 Visual Studio 中运行良好(使用 CMake GUI 生成的解决方案):

QQmlApplicationEngine failed to load component
qrc:/main.qml:-1 File not found

我试图找出问题并找到了这个很好的例子:https://github.com/mattfife/QtQuick-with-cmake,它在 QT Creator 中工作(经过一些修改),但在 Visual Studio 中却有完全相同的问题。

qml.qrc 文件是这样的:

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
    </qresource>
</RCC>

对于这两种环境(QT Creator 和 Visual Studio),我在构建目录中有一个文件src/qml.qrc.depends,其内容正是之前的 qml 文件。

main.cpp中的重要部分:

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
    return -1;

如果我消除CMakeLists.txt文件中的下一行,则可以在QT Creator中重现该错误:

qt5_add_resources(qml_QRC src/qml.qrc)

知道如何解决它或尝试什么吗?例如,我不知道如何调试这个QQmlApplicationEngine 对象。

【问题讨论】:

  • 您应该尝试加载":/main.qml" 而不是"qrc:/main.qml"。您的 qml.qrc 文件中未声明任何前缀。然后,您不必在调用文件之前使用一个。
  • @Abrikot 不,它不起作用。现在消息中的第二行是file:///D:/Sources/External/QtQuick-with-cmake/build/:/main.qml:-1 File not found
  • 我目前没有什么要测试的,但它似乎在构建目录中寻找你的文件。因此,如果您的 main.qml 文件被复制到 D:/Sources/External/QtQuick-with-cmake/build/main.‌​qml,则删除 :/ 应该可以,例如engine.load(QUrl(QStringLiteral("main.qml")));.
  • 嗯,它做了一些事情:QQmlApplicationEngine failed to load component file:///D:/Sources/External/QtQuick-with-cmake/build/main.qml:1 le module "QtQuick" n'est pas install? file:///D:/Sources/External/QtQuick-with-cmake/build/main.qml:2 le module "QtQuick.Window" n'est pas install? 抱歉...法语。 main.qml 中的前两行是:import QtQuick 2.3 import QtQuick.Window 2.2
  • 但即使这种解决方法可行,我认为这不是解决方案,因为 QT Creator 显然不需要它。此外,还有这个生成的 qrc_qml.cpp 文件......它不应该做这个工作吗?

标签: c++ visual-studio qt cmake qt-quick


【解决方案1】:

确保您已将生成的文件(我假设在您的情况下为 qrc_qml.cpp)添加到您的项目中。在 Visual Studio 中,当您右键单击 qml.qrc 时,有一个编译选项(或 Ctrl+F7)。这将从您的 qml.qrc 生成一个 cpp 文件。它通常在 GeneratedFiles 文件夹中生成。

【讨论】:

  • 感谢您的回答,但不幸的是,我不再“在那里”工作了。不过,我看到我提到了一些等效的示例(github 上的 mattfife),下次我将使用 Visual Studio 时会尝试这些示例。我希望我不会忘记:(