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 路径方式的。


 

最近的回复

  • 0_1531879249244_9090909.jpg
    各位上午好哦。很高兴告诉大家,我们的萌梦社区又进行了一波更新了!
    这次主要更新在论坛代码层面上的,也就是说我们根据NodeBB官方的指示,将论坛从1.9.3升级到了1.10.1了!整个升级过程会产生一些服务暂停的现象,不过没有关系,很快就可以得到恢复,现在咱们可以顺利地在新的论坛上玩耍了!
    这次更新按照NodeBB官方的说法,主要在论坛的稳定性和迎合欧盟的GPDR政策(隐私权保护政策)上,也就是说,咱们论坛默认是支持用户的隐私权保护的~不要担心自己的隐私会被黑客利用什么的,但是大家还是要保护好平时论坛登录的密码哦。合适的时候还是使用浏览器的记住密码功能~

    此外,之前萌梦论坛之前的SSL加密是免费的,费时效果又不好。在手机浏览器上显示并非可靠的颁发者,现在换了新的证书,感觉好了不少。现在又可以在论坛上玩耍啦。

    好了,就是这样~

    阅读更多
  • @jiangcaiyang 是不支持QVector3D类型么,需要引用头文件还是需要转换类型呢

    阅读更多
  • 可能是Qt制作的Python绑定Shiboken遇到了问题。求先行者能够解忧~😵

    阅读更多
  • 0_1531804634749_5.jpg
    我使用的是PyCharm作为IDE,下载了Qt for Python(使用Qt 5.11),并且使用git克隆了pyside的源代码 + 例子。因为自己对OpenGL感兴趣,所以随手运行了一个例子。首先是PyOpenGL没有安装。

    0_1531804316021_1f365ea0-46b3-460d-9a00-c8cdeccf98af-image.png

    通过对话框弹出的命令,在terminal上运行

    python -m pip install PyOpenGL PyOpenGL_accelerate

    就可以了。

    虽然窗体以及3D内容出来了,但是命令提示符中会出现一些问题:

    D:/QtProject/pyside-setup/examples/opengl/hellogl2.py:394: RuntimeWarning: SbkConverter: Unimplemented C++ array type. self.program.setUniformValue(self.lightPosLoc, QVector3D(0, 0, 70)) D:/QtProject/pyside-setup/examples/opengl/hellogl2.py:423: RuntimeWarning: SbkConverter: Unimplemented C++ array type. self.program.setUniformValue(self.projMatrixLoc, self.proj) D:/QtProject/pyside-setup/examples/opengl/hellogl2.py:424: RuntimeWarning: SbkConverter: Unimplemented C++ array type. self.program.setUniformValue(self.mvMatrixLoc, self.camera * self.world) D:/QtProject/pyside-setup/examples/opengl/hellogl2.py:426: RuntimeWarning: SbkConverter: Unimplemented C++ array type. self.program.setUniformValue(self.normalMatrixLoc, normalMatrix)

    刚学习Python,还不清楚是怎么回事,怎么解决才好。

    阅读更多

关注我们

微博
QQ群











召唤伊斯特瓦尔