Qt项目(Qml)中使用第三方组件的相关问题,主要是代码提示的问题



  • 新手刚接触Qt,很多问题都还一知半解,还请各位大大指点一下。
    参考例子

    情况一
    安装例子通过QPM的方式成功使用了第三方组件,如下图
    1.jpg
    但是发现有2个问题:
    标注1的地方,如果我要实现无标题栏的窗口的话(实现代码已注释掉),
    第三方组件的引入的语句 engine.addImportPath(QStringLiteral("qrc:/"));写在箭头位置是不起作用的,
    运行程序提示我io.qpm.example这个module未安装。
    我应该怎么做呢?
    标注2的地方,虽然我的程序能够正常运行了,但是编辑器中还是有红线提示找不到模块,而且引入的组件也没有代码提示了。
    我觉得应该有地方可以配置,还请大家告诉我一下,应该如何配置。

    情况二
    我不用pri的方式引入第三方组件。而是自己在项目中封装组件,自己使用。如下图
    2.jpg
    还是有几个小疑惑
    1、我的引入方式(通过路径)是否合理?
    2、qmldir这个文件还需要吗?
    3、为什么新的组件还是没代码提示呢?


  • 网站研运

    第一个问题,还要写在后面才行。
    第二个问题,你要手动执行qmldump(好像是这个名)生成一个typeinfo文件(好像是这个名),这样Qt Creator才会认得了。


  • 网站研运

    qmldir这个文件可要可不要。取决你生成插件是纯C++的还是带了QML的。



  • @jcyQt项目(Qml)中使用第三方组件的相关问题,主要是代码提示的问题 中说:

    第一个问题,还要写在后面才行。

    感谢你的及时回复!
    写在后面才行指的是?我可能还没理解



  • 这个例子在我的qtcreator 5.6中也是提示找不到模块。
    https://github.com/youngerking1985/QML_Learn/tree/master/QMLPlugin1

    凌乱 凌乱

    发现qt的每个版本变化都有些大,网上的很多方式可能都不适用了。
    对于新人来说就是灾难呢,%>_<%

    其实我就想知道在qt中,自己的一个项目中,封装了一些控件放在了一起,也编辑好了qmldir
    如果在项目中的其他文件中import ModuleName的方式引用,并且有代码提示,而不是现在的情况,需要通过import 路径的方式,并且还没有代码提示。

    大大们能够给个demo供我学习呢。



  • @iamaqter
    生成

    添加一个蓝色矩形MyR.qml
    修改qmldir
    module MyP
    MyR 1.0 MyR.qml

    这里的1.0应该就是和import MyP 1.0有关系
    如果是0.1后面的也要改成0.1

    使用
    将MyP文件夹拷贝至测试项目下
    新建测试项目TestPlugin
    修改.pro QML_IMPORT_PATH = C:/Users/XYLi/Desktop/qttemp/TestPlugin
    main.cpp添加 engine.addImportPath("C:/Users/XYLi/Desktop/qttemp/TestPlugin/");
    #include <QApplication>
    #include <QQmlApplicationEngine>
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.addImportPath("C:/Users/XYLi/Desktop/qttemp/TestPlugin/");
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
    }
    import QtQuick 2.5
    import QtQuick.Controls 1.4
    import MyPlugin 1.0
    import MyP 1.0
    ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    // MyRect{
    // }
    MyR{
    x:200;
    }
    }

    是这样吗?





  • @幻IV
    感谢大大的Demo,抱歉,有事情耽误了,现在才回复。
    已经运行起来了。
    1、在qml中 输入MyRe 后就会有提示,但是很好奇为什么输入My 或者MyR会没有提示呢?
    2、关于路径的问题,我想使用相对路径,应该怎么改呢?
    engine.addImportPath("C:/Users/XYLi/Desktop/qttemp/TestPlugin/");
    改成
    engine.addImportPath("./");
    就提示Module is not installed了。



  • @幻IV 原来里面的相对位置是 相对运行时的,终于搞明白了。
    再次感谢你的帮助



  • @幻IV 图片 这个项目中,我把组件放到文件夹中,编辑器就能正常提示。但是一旦把组件放到qrc中,编辑器就提示找不到了,但是程序运行没问题。我知道是QML_IMPORT_PATH设置错误引起的问题,可是目前试了很多方法,都不成功,能否指点一下。(如果把组件放到qml.qrc中,连运行时就提示组件未安装了。。。。)



  • 其实我就想知道在qt中,自己的一个项目中,封装了一些控件放在了一起(都放在了qrc资源中),也编辑了qmldir。

    qrc中的其他文件qml是通过import ModuleName的方式引用而不是现在的情况,需要通过import 路径的方式。

    再次感谢。。。。



  • @iamaqter 这我就不知道了qrc中我都是import 路径方式的。


登录后回复
 

与 萌梦社区 的连接断开,我们正在尝试重连,请耐心等待