Qt C++属性类型提供给 QML调用(二)
概述
在上一篇文章中已经介绍了 QML 中如何调用 C++的基础属性,那么这里来介绍如何调用C++对象类型属性。
QML 调用对象类型属性
在上一次的代码基础上直接修改一下, 再添加一个类定义,如下:
#include <QObject>
class StudentCourse;class Student : public QObject
{Q_OBJECTQ_PROPERTY(QString name READ getName WRITE setName NOTIFY sigNameChanged)Q_PROPERTY(StudentCourse* course READ getCourse WRITE setCourse NOTIFY sigCourseChanged)
public:explicit Student(QObject *parent = nullptr);~Student(){}void setCourse(StudentCourse* course){m_studentCourse = course;emit sigCourseChanged();}StudentCourse * getCourse(){return m_studentCourse;}void setName(const QString & name){if(name != m_name){m_name = name;emit sigNameChanged(m_name);}}QString getName() const {return m_name;}
signals:void sigNameChanged(QString name);void sigCourseChanged();private:QString m_name;StudentCourse * m_studentCourse = Q_NULLPTR;
};class StudentCourse : public QObject
{Q_OBJECTQ_PROPERTY(QString course READ getCourse WRITE setCourse NOTIFY sigCourseChanged)
public:explicit StudentCourse(QObject * parent = nullptr):QObject(parent){}~StudentCourse(){}void setCourse(const QString & course){if(course != m_course){m_course = course;emit sigCourseChanged(m_course);}}QString getCourse() const{return m_course;}signals:void sigCourseChanged(QString course);
private:QString m_course;
};
由于这次是要调用对象型属性,先要将类注册为 QML 可用的类型,在 main 中进行注册:
qmlRegisterType<Student>("Student", 1, 0, "Student");
qmlRegisterType<StudentCourse>("StudentCourse", 1, 0, "StudentCourse");
最后,在 QML 中进行调用,如下:
Window {visible: truewidth: 640height: 480// Label{
// anchors.centerIn: parent
// text: student.name// }Connections{target: stonSigNameChanged:{console.log("student name changed",name)}}Connections{target: st.courseonSigCourseChanged:{console.log("course changed:",st.course.course)}}Component.onCompleted: {st.name = "xiaoming"st.course.course = "yuwen"}Student{id:st
// name:"xiaoming"course: StudentCourse{
// course:"yuwen"}}
}
输出消息:
qml: student name changed xiaoming
qml: course changed: yuwen
代码写得很简单,应该都能看得懂,就不再赘述咯。
代码在这里
Qt C++属性类型提供给 QML调用(二)相关推荐
- Qt C++属性类型提供给 QML调用(五)
前言 前面已经介绍了四种从 QML 调用 C++的属性的方法,今天介绍最后一种,从 QML 调用 C++中的函数以及连接 C++中的信号. 调用 C++函数 任何继承于 QObject 类的 C++类 ...
- Qt C++属性类型提供给 QML调用(一)
概述 由于QML引擎与Qt元对象系统的紧密集成,任何由QObject派生出来的类其公有的接口或属性都可以从QML代码中轻松访问,并且改动的地方很少,就可以让C++代码定义的功能轻松扩展QML. 任何Q ...
- Qt C++属性类型提供给 QML调用(三)
前言 前面两篇文章已经介绍了 QML 中如何调用 C++中的基础属性以及对象属性,今天继续来介绍另外一种:对象为列表类型的属性调用方法. 概述 包含QObject派生类型列表的属性也可以暴露给QML使 ...
- Qt C++属性类型提供给 QML调用(四)
前言 前面已经介绍了三种关于 QML 调用 C++的属性方法,那么,今天继续介绍一种新的属性调用:分组属性. 分组属性 QML 调用 C++的分组属性,所谓的分组属性, 其实和第二篇文章介绍的调用类属 ...
- 使用Golang搭建gRPC服务提供给.NetCore调用
文章目录 gRPC概述 RPC gRPC又是什么呢 安装 Golang IDE(Goland) Protocol Buffer 下载Protocal Buffer 配置Protocal Buffer编 ...
- 46.qt quick-自定义非常好看的qml虚拟软键盘-支持换肤、动态加载移除语言(二)
在上章我们学习了45.qt quick-qml虚拟软键盘详解(一)_诺谦的博客-CSDN博客,知道如何自定义qml键盘后,本章继续来学习. 1.介绍 接下来我们便来自定义一款好看的qml软键盘.如下图 ...
- qml调用百度地图api实现卫星地球模式画路书轨迹
qml调用百度地图api实现卫星地球模式画路书轨迹 总结下类型转换: pro文件中加入依赖的模块 引入头文件 websockettransport.h main文件加入 qml index.html ...
- JavaScript 中对象的属性类型
对象的属性类型 JavaScript 中的对象的属性包括数据属性和访问器属性,在 JavaScript 引擎的内部实现中定义了用于描述属性(property)的特性(attribute).规范中将特性 ...
- JavaScript学习随记——属性类型
<!DOCTYPE HTML> <html><head><meta http-equiv="Content-Type" content=& ...
最新文章
- JavaScript的常用工具汇总
- 手动制作linux live,Linux下Live USB如何制作
- Arduino UNO WIFI开发板,学习必备开发套件
- LVS与keepalived
- 利用HttpWebRequest和HttpWebResponse做黑客注射工具
- 自考那些事儿(七):信息资源管理(总述篇)
- python热成像_matplotlib实现热成像图colorbar和极坐标图的方法
- lammps教程:1D正弦粗糙界面建模建模教程
- 2021年还有人用.net吗
- html5移动端webscoket实现在线聊天
- linux编辑文件发生错误E45: ‘readonly‘ option is set (add ! to override)
- 投票动态代理proxy案例(java)
- java计算机毕业设计小区失物招领网站源程序+mysql+系统+lw文档+远程调试
- 电商类-仿美团页面demo
- windows进程被占用,文件夹被占用解除被占用的方法
- 算法题解——将字符串转化为ip地址
- 深度解决 SecurityException: User has not given permission to device UsbDevice
- html5 电子白板 直播,HTML5 canvas 做画板画图 可以做电子白板
- css3实现向一个方向无缝连接滚动
- Windows 32bit 系统如何识别,使用 3GBytes 以上内存