QT:qml与ui的结合使用(使用qml软件的发布方法)

qml与ui界面的结合使用

一般来说,同一项目下,是不太会出现同时使用qml和ui两种方式来编写界面的,但是,实际开发中,总是会遇到各种意外的情况和需求。比如两个不同软件的合并。下面将介绍两种qml和ui界面的结合方式。

qml调用ui界面

qml对ui界面的调用,主要是获取qml界面的句柄,然后赋给需要调用的ui界面,再在qml中需要的地方开一个控件,用来加载修改过句柄的ui界面。具体代码如下:

这里的qml引擎engine一般都是指向main.qml,不用多说。之后代码,可以获取到qml界面的窗口句柄,用来修改这里初始化建立的需要加载的ui界面类的句柄,之后就是在qml中调用,这里我就不贴代码了,因为每个人的调用方式不一定一样,我就讲一下自己的调用方式:
———我的qml结构,是只有一个window的,通过切换该window加载的url来实现不同界面的显示。
———所以我单独开了一个空白的url,用来加载该ui界面,在main.qml中切换到该url时,发出信号
———在c++中接收该信号,并与 Widget 的 show() 函数建立connect,该Wideget可以直接show出来

ui界面中调用qml

在ui界面中调用qml,其实更加简单一点,只需要单独拿一个控件出来用来显示qml的界面即可,但需要注意的是,在main.qml和main.cpp同时存在的情况下,如果单纯地复制原qml软件中的main.cpp代码到ui软件的main.cpp之中,即使运行起来,也会同时开启ui和qml两个软件。所以在ui中调用qml,需要重新处理main函数的结构。下面是代码:

上面的代码,就是用一个QQuickWidget控件来加载qml界面的方法,不需要引擎engine这些东西,只需要一个url即可。
注意一点,最后一行是一个类似 root 的指针,指向加载的qml界面,可以通过这个指针去 findchild 你需要的各个qml界面中的控件或者信号。

带qml的软件发布

一般qt的软件发布,都会用qt控制台自带的windeployqt命令去寻找依赖库,有时候找的全,有时候找不全,但一般来说,只要补全外部库,qt自带的内部库,是可以给你找全的。但是,一旦加了qml之后,基本是找不全的,连自己的内部库都找不全,也是真的无语,反正我带qml的项目,用windeployqt去找,最后一般运行不起来,运气好运行起来,qml界面也是黑的。
所以,发布qml软件的最好方式就是:拷贝你release编译目录下的exe文件到一个空文件夹里,再拷贝qt安装目录下(…:qt5.13.25.13.2msvc2015_64),bin文件夹、plugins文件夹以及qml文件夹里的全部文件到该文件夹下,删光debug库文件(就是名字最好一个字母是d的dll文件),再把你添加的外部库也全部考进来,用 inno打包,这样是可以发布运行的,或许会加上很多没必要的库,但是我实在懒得一个个找了,你们有什么好方法,底下留个言可好。

来源:跳起来打我膝盖丶

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月16日
下一篇 2020年2月16日

相关推荐