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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt文档阅读笔记-Q_PROPERTY解析及实例

發(fā)布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt文档阅读笔记-Q_PROPERTY解析及实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

官方解析

博主栗子


官方解析

這個宏用于繼承于QObject的類聲明屬性。這樣聲明后的屬性行為與類數(shù)據(jù)成員一樣,但是他們可以通過元對象系統(tǒng)進行訪問。

Q_PROPERTY(type name(READ getFunction [WRITE setFunction] |MEMBER memberName [(READ getFunction | WRITE setFunction)])[RESET resetFunction][NOTIFY notifySignal][REVISION int][DESIGNABLE bool][SCRIPTABLE bool][STORED bool][USER bool][CONSTANT][FINAL])

這個屬性需要屬性名,以為返回值類型,以及READ函數(shù)。返回值類型只要是QVariant支持的都闊以(這里要特別注意Q_DECLARE_METATYPE聲明的類型也是可以用的),還有幾個屬性是可選的,但是寫一個WRITE函數(shù)是很常見的。其他的屬性處理USER是false外其他都為true。

Q_PROPERTY(QString title READ title WRITE setTitle USER true)

關(guān)于這個宏的更讀信息,以及這個宏的詳細使用要看Qt's Property System這篇文檔。

?

博主栗子

運行截圖如下:

myclass.h

#ifndef MYCLASS_H #define MYCLASS_H#include <QObject>class MyClass : public QObject {Q_OBJECTQ_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) public:explicit MyClass(QObject *parent = 0);enum Priority{One,Two,Three};Q_ENUM(Priority)void setPriority(Priority priority);Priority priority()const;public slots:void prioritySLOT(Priority priority);signals:void priorityChanged(Priority);private:Priority m_priority;};#endif // MYCLASS_H

main.cpp

#include "myclass.h" #include <QApplication> #include <QMetaObject> #include <QMetaProperty> #include <QDebug> #include <QVariant>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyClass *myinstance=new MyClass;QObject *object=myinstance;object->setProperty("priority","Two");//myinstance->setPriority(MyClass::Two); Method 2//change valuemyinstance->setPriority(MyClass::Three);const QMetaObject *metaobject=object->metaObject();for(int i=0;i<metaobject->propertyCount();i++){QMetaProperty metaproperty=metaobject->property(i);qDebug()<<object->property(metaproperty.name());}return a.exec(); }

myclass.cpp

#include "myclass.h" #include <QDebug>MyClass::MyClass(QObject *parent) : QObject(parent) {connect(this,SIGNAL(priorityChanged(Priority)),this,SLOT(prioritySLOT(Priority))); }void MyClass::setPriority(Priority priority) {m_priority=priority;emit priorityChanged(priority); }MyClass::Priority MyClass::priority() const {return m_priority; }void MyClass::prioritySLOT(MyClass::Priority priority) {qDebug()<<"prioritySLOT called! The priority value is "<<priority; }

運行截圖如下:

當(dāng)去掉

Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)

后運行截圖如下:

這里可以看到元對象屬性里面沒有他了,

關(guān)于為什么一開始就會有個QString,類型的屬性,并且名字為objectname,將會在另外一篇博文中給出

總結(jié)

以上是生活随笔為你收集整理的Qt文档阅读笔记-Q_PROPERTY解析及实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。