Qt C++属性类型提供给 QML调用(四)
生活随笔
收集整理的這篇文章主要介紹了
Qt C++属性类型提供给 QML调用(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
前面已經介紹了三種關于 QML 調用 C++的屬性方法,那么,今天繼續介紹一種新的屬性調用:分組屬性。
分組屬性
QML 調用 C++的分組屬性,所謂的分組屬性, 其實和第二篇文章介紹的調用類屬性有些類似,寫法有點類似下面這種形式:
Rectangle{anchors.left: ...anchors.leftMargin:... }這其實就是一個分組屬性,這兩個屬性都是屬于anchors組的。
但是這里需要注意的是,分組屬性僅僅和對象屬性的寫法相同,但是其實際上有比較大的區別,因為分組屬性是只讀的,并且在構造時由父對象初始化為有效值。分組屬性的子屬性可以從QML修改,但分組屬性對象本身永遠不會改變,而對象類型屬性可以隨時從QML分配一個新的對象值。因此,分組屬性對象的生命周期嚴格受C ++父實現控制,而對象類型屬性可以通過QML代碼自由創建和銷毀。
那么如何去調用 C++的分組屬性呢,來看看以下示例:
class StudentInfo : public QObject {Q_OBJECTQ_PROPERTY(QString className READ getClass WRITE setClass)Q_PROPERTY(QString address READ getAddress WRITE setAddress) public:explicit StudentInfo(QObject * parent = 0):QObject(parent) {}void setClass(const QString & c){if(c != m_class){m_class = c;}}QString getClass()const{return m_class;}void setAddress(const QString & a){if(a != m_address){m_address = a;}}QString getAddress()const{return m_address;}private:QString m_class;QString m_address; };class Student : public QObject {Q_OBJECTQ_PROPERTY(QString name READ getName WRITE setName NOTIFY sigNameChanged)Q_PROPERTY(StudentInfo* info READ getInfo)public:explicit Student(QObject *parent = nullptr):QObject(parent){m_info = new StudentInfo(this);}~Student(){}void setName(const QString & name){if(name != m_name){m_name = name;emit sigNameChanged(m_name);}}QString getName() const {return m_name;}StudentInfo * getInfo(){return m_info;}signals:void sigNameChanged(QString name);private:QString m_name;StudentInfo * m_info = NULL;};然后在 Main 函數中注冊:
qmlRegisterType<Student>("Student", 1, 0, "Student"); qmlRegisterType<StudentInfo>("StudentInfo", 1, 0, "StudentInfo");在 QML 中進行調用:
Student{info.className:"aaa"info.address:"bbb" }然后我們會到 main函數中將信息輸出:
QQmlEngine engine; QQmlComponent component(&engine, QUrl("qrc:main.qml")); Student *student = qobject_cast<Student *>(component.create());if(student){qWarning() << " " << student->getInfo()->getAddress() << student->getInfo()->getClass() ; }編譯運行,輸出如下:
"bbb" "aaa"其實用法很簡單,就不再多說啦。
代碼在這里
總結
以上是生活随笔為你收集整理的Qt C++属性类型提供给 QML调用(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt C++属性类型提供给 QML调用(
- 下一篇: Qt C++属性类型提供给 QML调用(