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


 

最近的回复

  • 随后在git for windows这个软件中输入

    git clone git@git.coding.net:jiangcaiyang1/qtdreamrelease_windows.git

    就可以获得一个空的项目了。其它的项目也是同样的操作方法。然后呢,将此作为自动构建的代码库吧。
    此次介绍就是这样~😘 😘 🐧

    阅读更多
  • 0_1540027445466_很好.jpg
    萌梦安装包的分发始终是一个难题。要有一个稳定并且有效的方法进行分包,才能让大家都能够享受到萌梦动作编辑器的最新功能。我们目前有两种分发的方法:

    离线安装包。通常的位置是
    1.1 百度云盘
    1.2 QQ群文件
    1.3 github
    其中百度云盘和QQ群文件不会定期地更新,只有github的文件会定期更新。因为构建脚本要求每次有更改,都让github的文件更新。

    在线安装包。通常的位置是
    2.1 百度云盘
    2.2 QQ群文件
    2.3 github
    这里在线安装包的代码库主要还是在github中,在线安装包非常依赖CDN加速。目前github这块儿在国内做得不太好,还是希望在国内找一个类似的加速。目前可以选的只有两家:

    码云

    coding

    因为以前做过coding的加速,目前coding已经和腾讯云战略合作,所有的代码都要迁移到腾讯云了。而且对于代码库的空间要求变高了。128M。目前我的一个账号显然满足不了要求。所以有必要再注册一个账号。

    下面记录一下新建coding代码库的方法,并且尝试将萌梦安装包的线上代码库部分移动到coding代码库中。

    注册

    到这个位置注册。

    https://coding.net/register

    相信很快就会带你跳转到腾讯云中。不过这里我选择的是邮箱的方式,因为我希望注册尽量多的账号。

    设置ssh密钥

    进入控制台后,是这样的:
    0_1540028446495_2eeb7e93-c15b-4c82-9b36-58e1c304ea3f-image.png
    这个时候,我们要先创建项目,然后ssh的公钥。
    0_1540028822318_b3e81b93-099c-42d5-820d-deaf8d445913-image.png

    创建以后,开始部署公钥。在这里:
    0_1540028925337_d8059b64-8535-45e5-ba4c-d7454505aa5a-image.png
    这期间最好用OpenSSL生成SSH密钥。
    我使用的是git for windows来生成密钥的。方法是

    ssh-keygen

    如果你生成好了密钥,可以直接打开密钥内容看看:

    cat ~/.ssh/id_rsa.pub

    然后粘贴到网站的文本框中。

    添加好了之后,勾选“准许推送权限”,需要推送代码到代码库中。

    阅读更多

关注我们

微博
QQ群











召唤伊斯特瓦尔