【问题标题】:QQmlApplicationEngine does not accept correct QML when project is built with CMake in CLion在 CLion 中使用 CMake 构建项目时,QQmlApplicationEngine 不接受正确的 QML
【发布时间】:2023-03-11 22:50:02
【问题描述】:

我有一个非常简单的正确 Qt QML 项目,使用 Qt 5.9.1 和运行良好的 qmake 编写和构建。但是我想使用 CLion 来编辑 c++ 代码,所以我创建了 CMake 项目配置,如互联网上许多教程中所述。构建进展顺利,但是当应用程序启动时,它会产生非常奇怪的 QQmlApplicationEngine 错误,就像我的 qml 写得完全错误:

QQmlApplicationEngine failed to load component
main.qml:1 Expected token `numeric literal'
main.qml:1 Expected a qualified name id

这是我在 MacOS X 下的配置:(注意:我确实故意使用 QRC!)

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(simple_project)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5 5.9.1 REQUIRED Core Widgets Gui Qml Quick)

set(SOURCE_FILES
        main.cpp
        main.qml)

add_executable(simple_project ${SOURCE_FILES})
target_link_libraries(simple_project
        Qt5::Core
        Qt5::Widgets
        Qt5::Gui
        Qt5::Qml
        Qt5::Quick)

ma​​in.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[]) {
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load("main.qml");

    return app.exec();
}

ma​​in.qml 位于可执行文件所在的同一目录中:

import QtQuick.Controls 2.1
import QtQuick 2.7
import QtQuick.Layouts 1.2

ApplicationWindow {
    visible: true
    width: 480
    height: 320
}

【问题讨论】:

  • 您是否已将 .qml 添加到 .qrc 中?
  • @eyllanesc 我不使用 qrc,我只是在同一目录中加载本地 *.qml 文件。如您所见,qml引擎很好地找到了文件,但它无法以某种方式解析它。
  • 应该 main.qml 与您的可执行文件在同一个文件夹中吗?
  • 不,这只是一个简单项目的示例,具有尽可能少的依赖项。
  • 请提供一个mvce,这意味着您重现了您的错误,这是一致的。我刚试过它对我有用。

标签: qt cmake qml clion qqmlapplicationengine


【解决方案1】:

在多次尝试使用不同的编辑器后,我在 CLion 2017.2 中发现了一个问题,它在文件的第一个位置添加了一些不可打印的符号。如果在(例如)mcedit 中打开文件并从 qml 文件中删除第一个“空格”符号,问题就解决了。

【讨论】:

  • 我也遇到了同样的错误(我不使用 CLion),这确实是由于一个不可打印的符号。不过我不知道它是如何出现在我的文件中的。
  • 我怀疑这是 BOM。
猜你喜欢
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2021-02-09
  • 2021-09-15
  • 2017-04-16
  • 2012-01-19
  • 1970-01-01
相关资源
最近更新 更多