概述

在上一篇文章中已经介绍了 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调用(二)相关推荐

  1. Qt C++属性类型提供给 QML调用(五)

    前言 前面已经介绍了四种从 QML 调用 C++的属性的方法,今天介绍最后一种,从 QML 调用 C++中的函数以及连接 C++中的信号. 调用 C++函数 任何继承于 QObject 类的 C++类 ...

  2. Qt C++属性类型提供给 QML调用(一)

    概述 由于QML引擎与Qt元对象系统的紧密集成,任何由QObject派生出来的类其公有的接口或属性都可以从QML代码中轻松访问,并且改动的地方很少,就可以让C++代码定义的功能轻松扩展QML. 任何Q ...

  3. Qt C++属性类型提供给 QML调用(三)

    前言 前面两篇文章已经介绍了 QML 中如何调用 C++中的基础属性以及对象属性,今天继续来介绍另外一种:对象为列表类型的属性调用方法. 概述 包含QObject派生类型列表的属性也可以暴露给QML使 ...

  4. Qt C++属性类型提供给 QML调用(四)

    前言 前面已经介绍了三种关于 QML 调用 C++的属性方法,那么,今天继续介绍一种新的属性调用:分组属性. 分组属性 QML 调用 C++的分组属性,所谓的分组属性, 其实和第二篇文章介绍的调用类属 ...

  5. 使用Golang搭建gRPC服务提供给.NetCore调用

    文章目录 gRPC概述 RPC gRPC又是什么呢 安装 Golang IDE(Goland) Protocol Buffer 下载Protocal Buffer 配置Protocal Buffer编 ...

  6. 46.qt quick-自定义非常好看的qml虚拟软键盘-支持换肤、动态加载移除语言(二)

    在上章我们学习了45.qt quick-qml虚拟软键盘详解(一)_诺谦的博客-CSDN博客,知道如何自定义qml键盘后,本章继续来学习. 1.介绍 接下来我们便来自定义一款好看的qml软键盘.如下图 ...

  7. qml调用百度地图api实现卫星地球模式画路书轨迹

    qml调用百度地图api实现卫星地球模式画路书轨迹 总结下类型转换: pro文件中加入依赖的模块 引入头文件 websockettransport.h main文件加入 qml index.html ...

  8. JavaScript 中对象的属性类型

    对象的属性类型 JavaScript 中的对象的属性包括数据属性和访问器属性,在 JavaScript 引擎的内部实现中定义了用于描述属性(property)的特性(attribute).规范中将特性 ...

  9. JavaScript学习随记——属性类型

    <!DOCTYPE HTML> <html><head><meta http-equiv="Content-Type" content=& ...

最新文章

  1. JavaScript的常用工具汇总
  2. 手动制作linux live,Linux下Live USB如何制作
  3. Arduino UNO WIFI开发板,学习必备开发套件
  4. LVS与keepalived
  5. 利用HttpWebRequest和HttpWebResponse做黑客注射工具
  6. 自考那些事儿(七):信息资源管理(总述篇)
  7. python热成像_matplotlib实现热成像图colorbar和极坐标图的方法
  8. lammps教程:1D正弦粗糙界面建模建模教程
  9. 2021年还有人用.net吗
  10. html5移动端webscoket实现在线聊天
  11. linux编辑文件发生错误E45: ‘readonly‘ option is set (add ! to override)
  12. 投票动态代理proxy案例(java)
  13. java计算机毕业设计小区失物招领网站源程序+mysql+系统+lw文档+远程调试
  14. 电商类-仿美团页面demo
  15. windows进程被占用,文件夹被占用解除被占用的方法
  16. 算法题解——将字符串转化为ip地址
  17. 深度解决 SecurityException: User has not given permission to device UsbDevice
  18. html5 电子白板 直播,HTML5 canvas 做画板画图 可以做电子白板
  19. css3实现向一个方向无缝连接滚动
  20. Windows 32bit 系统如何识别,使用 3GBytes 以上内存

热门文章

  1. 微信视频号推荐算法上分技巧
  2. 网易云信与极客邦科技联合,发起抗击疫情行动,百家企业贡献资源
  3. 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?
  4. 数据500%暴涨的神秘公式,顶级增长黑客如何实现用户指数级增长
  5. mongodb(2)
  6. java Memcache使用详解
  7. 记我的一次电话面试 (转)
  8. linux编译安装git
  9. 解决Button在IE6、7下的自适应宽度问题
  10. 一个Linux下的 俄罗斯方块游戏,基于 ncurse 库。。