Qt C++属性类型提供给 QML调用(二)
生活随笔
收集整理的這篇文章主要介紹了
Qt C++属性类型提供给 QML调用(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
概述
在上一篇文章中已經(jīng)介紹了 QML 中如何調(diào)用 C++的基礎(chǔ)屬性,那么這里來介紹如何調(diào)用C++對(duì)象類型屬性。
QML 調(diào)用對(duì)象類型屬性
在上一次的代碼基礎(chǔ)上直接修改一下, 再添加一個(gè)類定義,如下:
#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; };由于這次是要調(diào)用對(duì)象型屬性,先要將類注冊(cè)為 QML 可用的類型,在 main 中進(jìn)行注冊(cè):
qmlRegisterType<Student>("Student", 1, 0, "Student"); qmlRegisterType<StudentCourse>("StudentCourse", 1, 0, "StudentCourse");最后,在 QML 中進(jìn)行調(diào)用,如下:
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代碼寫得很簡(jiǎn)單,應(yīng)該都能看得懂,就不再贅述咯。
代碼在這里
總結(jié)
以上是生活随笔為你收集整理的Qt C++属性类型提供给 QML调用(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt C++属性类型提供给 QML调用(
- 下一篇: Qt C++属性类型提供给 QML调用(