Qt:QtQuick:使用Qt静态库无法找到qml

简介

调试运行提示

QQmlApplicationEngine failed to load component
qrc:/main.qml:2 module "QtQuick.Controls" is not installed
qrc:/main.qml:1 module "QtQuick" is not installed
qrc:/main.qml:2 module "QtQuick.Controls" is not installed

解决方案

看了几篇文章解决方案都不优雅,提供一个自认为比较好的方法,告诉程序去哪里加载qml

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.addImportPath("C:\\Qt\\Qt5.6.2\\5.6\\static-vs2015-qt5.6.2\\qml");
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

参考方案

还有一种是这样导入,在qml文件夹中找到模块的描述文件qmldir ,根据里面的module classname导入

Qt:QtQuick:使用Qt静态库无法找到qml_第1张图片

 Q_IMPORT_PLUGIN(classname) //使用类名
qobject_cast(qt_static_plugin_module().instance())->registerTypes("QtQuick"); //使用带类名的函数和 模块名字符串

 qobject_cast(qt_static_plugin_QtQuick2Plugin().instance()) ->initializeEngine( &engine, "QtQuick"); 
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;


    Q_IMPORT_PLUGIN(QtQuick2Plugin) //使用类名
    Q_IMPORT_PLUGIN(QtQuickControlsPlugin) //使用类名
    Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
    Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin)
    Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)

    ////////////////////
    qobject_cast(qt_static_plugin_QtQuick2Plugin().instance())->registerTypes("QtQuick"); //使用带类名的函数和 模块名字符串

    qobject_cast(qt_static_plugin_QtQuick2Plugin().instance()) ->initializeEngine( &engine, "QtQuick"); //使用带类名的函数和 模块名字符串

    qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls"); //使用带类名的函数和 模块名字符串

    qobject_cast(qt_static_plugin_QtQuickControlsPlugin.instance()) ->initializeEngine( &engine, "QtQuick.Controls"); //使用带类名的函数和 模块名字符串



    qobject_cast(qt_static_plugin_QtQuick2Plugin().instance())->registerTypes("QtQuick");
    qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls");
    qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls.Private");
    qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls.Styles");
    qobject_cast(qt_static_plugin_QtQuickLayoutsPlugin().instance()) ->registerTypes("QtQuick.Layouts");
    qobject_cast(qt_static_plugin_QtQuick2WindowPlugin().instance()) ->registerTypes("QtQuick.Window.2");


    qobject_cast(qt_static_plugin_QtQuick2Plugin().instance()) ->initializeEngine( &engine, "QtQuick");
    qobject_cast(qt_static_plugin_QtQuickControlsPlugin().instance())->initializeEngine( &engine, "QtQuick.Controls");
    qobject_cast(qt_static_plugin_QtQuickLayoutsPlugin().instance()) ->initializeEngine( &engine, "QtQuick.Layouts");
    qobject_cast(qt_static_plugin_QtQuickLayoutsPlugin().instance()) ->initializeEngine( &engine, "QtQuick.Layouts");
    qobject_cast(qt_static_plugin_QtQuick2WindowPlugin().instance()) ->initializeEngine( &engine, "QtQuick.Window.2");



    //engine.addImportPath("C:\\Qt\\Qt5.6.2\\5.6\\static-vs2015-qt5.6.2\\qml");

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

    return app.exec();
}

引用

http://doc.qt.io/qt-5/qtqml-syntax-imports.html#qml-import-path
http://tieba.baidu.com/p/3537364638?share=9105&fr=share

你可能感兴趣的:(Qt,Qt学习笔记)