日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2025/1/21 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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调用(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。