当我尝试将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
}
}
答案 0 :(得分:0)
我被困在一个类似的问题上,并且对Qt关于这个主题的文档感到沮丧,所以我会把我解决自己问题的方法用于后代。
我不确定您问题的确切原因,但我可以为您提供尝试并对其进行问题排查的建议。
在main.cpp中添加以下行。
qDebug()<<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);
其中&#34;目录&#34;是include目录的QString。
我的理解是QML2_IMPORT_PATH
变量仅适用于运行时,而不适用于编译时,这意味着QtCreator在编译时不会看到路径。另一方面,engine.addImportPath(directory);
在启动qml引擎之前添加路径(以及第一个qml import语句)
我不是说这是解决问题的最佳方法,但它确实帮助我解决了我的问题。
答案 1 :(得分:0)
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轴”示例源中找到答案。
答案 2 :(得分:-1)
我刚遇到一个问题(在构建输出文件夹中运行“ Windeployqt.exe”后,可能像您的问题(未安装xxx.qml:3模块“ QtCharts”)。我知道了。
即使我使用了选项C:\Qt\5.7\mingw53_32\qml
,部署工具(Windeployqt)也没有从--qmldir C:\Qt\5.7\mingw53_32\qml
文件夹中复制模块(QtCharts)。我尝试手动复制QtCharts模块,并且可以正常工作。