发表时间:2022-03-25来源:网络
之前写的文章都是一段一段的,现在整合起来,预估又是一段长臭文...
零、前言
1、先看一下相关类的继承关系:
①、视图关系

②、QML加载相关

上方图参考:https://blog.csdn.net/qq_34139994/article/details/105195447
2、关于Qt与QML的个人理解
一切的一切,底层都是C++实现的,我们通过Qt封装好的C++类,如视图、引擎等,去加载QML文件,底层C++读取这些QML文本后,动态实例化相关对象,最终呈现在界面上。
一、在Qt中加载QML的方式
1、搭配 Window
2、 搭配 Item
3、 加载 QML【Item】
见之前文章:https://www.cnblogs.com/judes/p/15606042.html
注意本文以Quick工程为例,非Widget工程,故选择的是前两种加载方式
二、传递C++类型/对象给QML使用
1、注册
有非常多的注册模板函数可供使用,相关信息在手册里直接搜索..
int ype int pe int creatableType int //注册一个接口,不可被实例化,可以使用类型名引用【多态】 void int int nstance int ype //注册单例类型,可安全代替setContextProperty int //注册一个可实例化对象,最常用 int ilable int eMetaObject int eType //注册不可被实例化的对象,可以使用其中的枚举举例:创建一个C++的Udp类,并注册给QML用
//cpp ("Myudp.module",1,0,"Myudp"); //qml需要添加头文件:
#include
2、设置上下文
三种加载方式使用的工具是:
它们都具有一个函数rootContext,返回;
提供函数:setContextProperty【注册单个上下文属性】、setContextProperties【注册多个上下文属性】。
这个上下文属性其实就是在C++里实例化了的对象,效果与上面的注册单例ype一致。
举例:
//C++ Myudp udp; engine; engine.rootContext()->setContextProperty("udp",&udp);//注册对象 //QML udp.initUdpSlot()注意:需要先设置上下文,再连接qml:

三、封装C++对象
上面只是QML里能够用简单访问到C++对象,是不足以支持实际项目开发的,故需要对C++对象进行封装。
见之前的文章:https://www.cnblogs.com/judes/p/11242922.html
Qt提供了这些宏用于封装:
1、信号与槽 C++类中的信号与槽都可以在QML中访问 2、C++类的成员函数,Q_INVOKABLE Q_INVOKABLE void function(); 3、C++类的枚举,Q_ENUMS Q_ENUMS (enumName) 4、C++的属性,Q_PROPERTY Q_PROPERTY( text READ text WRITE setText NOTIFY textChanged)
1、例子:封装一个颜色生成器给QML使用,C++暴露属性、信号、槽、函数、枚举,QML使用【信号的使用有多种方式】
①、MyColor.h
#ifndef MYCOLOR_H #define MYCOLOR_H #include #include #include //注册函数需要 #include #include class MyColor : public { Q_OBJECT //枚举暴露 Q_ENUMS(RECT_COLOR) //属性暴露,QML可直接使用属性[动态绑定、获取、设置,前提是匹配了对应函数] Q_PROPERTY( color READ getColor NOTIFY colorChanged) Q_PROPERTY( info READ getInfo WRITE setInfo) //属性相关 public: explicit MyColor( *parent = nullptr); inline getColor(){return m_cur_color;} inline getInfo(){return m_info;} inline void setInfo( info){m_info = info;qDebug()findChild(""); if (){ ::connect(, SIGNAL(clicked()), &app, SLOT(quit())); }见之前文章:https://www.cnblogs.com/judes/p/11243242.html
七、进阶之MVC编程
MVC编程也是QML与C++的混合编程,通常C++提供Model也就是数据,QML提供View也就是视图。见之前文章:
ListView:https://www.cnblogs.com/judes/p/13450897.html
MVC:https://www.cnblogs.com/judes/p/15622972.html
上一篇:C++ 多线程实例
下一篇:虚幻引擎C++编程游戏开发基础
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14