QML 导入 QtCharts 模块错误

Posted

技术标签:

【中文标题】QML 导入 QtCharts 模块错误【英文标题】:QML import QtCharts module error 【发布时间】:2016-08-08 17:12:18 【问题描述】:

当我尝试将 QtCharts 模块导入我的 QML 文件时,总是会收到相同的警告消息:

“发现导入无效:文件:C:/.. 模块“QtCharts”不是 已安装”

我正在使用 OpenSource QtCreator 4.0.3 和 Qt 5.7.0。

我在路径中有文件夹 QtCharts:C:\Qt\5.7\mingw53_32\qml

我还使用 .pro 文件中的属性包含了文件夹路径:

QML2_IMPORT_PATH: C:\Qt\5.7\mingw53_32\qml

我错过了什么?

这是一个简单的测试代码:

// QtChartsTest.pro

TEMPLATE = app

QT += qml quick
QT += charts

CONFIG += c++11

SOURCES += main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model

QML2_IMPORT_PATH = C:\Qt\5.7\mingw53_32\qml


# Default rules for deployment.
include(deployment.pri)

// Main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();

// Main.qml

import QtQuick 2.7
import QtQuick.Window 2.2
import QtCharts 2.1

Window 
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Text 
        text: qsTr("Hello World")
        anchors.centerIn: parent
    

【问题讨论】:

请显示代码中的导入行。顺便说一句,它应该可以在不设置导入路径的情况下工作。 我刚刚遇到了同样的问题,并且正在运行与您自己相同的 Qt 版本。你解决了吗?如果是这样,了解如何操作会很有帮助。 这能回答你的问题吗? import QtQuick.Controls 2.1 QML MODULE NOT FOUND 【参考方案1】:

我被困在一个类似的问题上,并且对 Qt 关于该主题的文档感到沮丧,所以我将把我自己解决问题的方法放在这里以供后人使用。

我不确定您的问题的确切原因,但我可以为您提供尝试解决问题的建议。

在您的 main.cpp 中添加以下行。 qDebug()&lt;&lt;engine.importPathList();

所以你的主要是

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QDebug>

int main(int argc, char *argv[])

    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    qDebug()<<engine.importPathList();
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();

这将包括包含路径的完整列表。如果您没有看到那里列出的包含路径,您可以通过添加以下行来添加它:

engine.addImportPath(directory);

其中“目录”是包含目录的 QString。

我的理解是QML2_IMPORT_PATH这个变量只适用于运行时,而不适用于编译时,也就是说QtCreator在编译的时候是看不到路径的。另一方面,engine.addImportPath(directory); 在启动 qml 引擎之前添加路径,(因此是第一个 qml 导入语句)

我并不是说这是解决您的问题的最佳方法,但它确实帮助我解决了我的问题。

【讨论】:

【参考方案2】:
int main(int argc, char *argv[])

    // Qt Charts uses Qt Graphics View Framework for drawing, therefore QApplication must be used.
    QApplication app(argc, argv);

    QQuickView viewer;

    // The following are needed to make examples run without having to install the module
    // in desktop environments.
#ifdef Q_OS_WIN
    QString extraImportPath(QStringLiteral("%1/../../../../%2"));
#else
    QString extraImportPath(QStringLiteral("%1/../../../%2"));
#endif
    viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
                                      QString::fromLatin1("qml")));
    //***** [Solve] FORCE THE MODULE TO BE IMPORTED.
    QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
    
    qDebug() << viewer.engine()->importPathList();

    viewer.setTitle(QStringLiteral("QML Axes"));
    viewer.setSource(QUrl("qrc:/qml/qmlaxes/main.qml"));
    viewer.setResizeMode(QQuickView::SizeRootObjectToView);
    viewer.show();

    return app.exec();

[通过 qDebug() 输出] ("/home/snjee/workspace_qt/maxelecPrjs/build-maxCoffeeTdsMeterApp-Desktop_Qt_5_15_2_GCC_64bit-Debug", "qrc:/qt-project.org/imports", "/opt/Qt/5.15.2/gcc_64/qml")

您可以在内置的“QML Axes”示例源代码中找到答案。

【讨论】:

以上是关于QML 导入 QtCharts 模块错误的主要内容,如果未能解决你的问题,请参考以下文章

Qt qml 下使QtCharts

超简单的 stackedbarchart

使用 PyQt 将基于 qml 的图表集成到现有的 ui

超简单的piechart

QML 导入模块

QML导入模块