最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

qt屬性系統(tǒng)_學(xué)到牛牛

得益于Qt反射機(jī)制,我們可以獲取類(lèi)對(duì)象的成員信息,這其中就包含了屬性信息,屬性其實(shí)就是類(lèi)中的一種數(shù)據(jù)成員,不同在于屬性需要通過(guò)宏定義Q_PROPERTY進(jìn)行注冊(cè),它的使用也必須滿(mǎn)足反射機(jī)制的條件——類(lèi)須直接或間接繼承QObject且包含Q_OBJECT宏,這樣就可以通過(guò)元對(duì)象的屬性類(lèi)(QMetaProperty)來(lái)獲取屬性相關(guān)信息,下面是QMetaProperty的一些常用接口說(shuō)明:

bool hasNotifySignal() const? ?//屬性是否有關(guān)聯(lián)信號(hào)

bool isConstant() const? ?//屬性是否是常量不能更改

bool isDesignable(const QObject *object = nullptr) const //該屬性在QDesigner的屬性編輯器中是否可見(jiàn)

bool isEnumType() const? ? //屬性是否為枚舉類(lèi)型

bool isFinal() const? //屬性FINAL聲明是否為true,為true表示該屬性不可被重寫(xiě)

bool isFlagType() const? ? //屬性是否為標(biāo)志枚舉類(lèi)型

bool isReadable() const? ? //屬性是否可讀

bool isResettable() const? ? //屬性是否可被重置

bool isScriptable(const QObject *object = nullptr) const? ?//屬性是否可被腳本引擎訪(fǎng)問(wèn)

bool isStored(const QObject *object = nullptr) const? ?//對(duì)象狀態(tài)保存時(shí)是否保存屬性值

bool isUser(const QObject *object = nullptr) const? ? //屬性是否可編輯,對(duì)應(yīng)屬性的USER聲明

bool isValid() const? ? ?//屬性是否有效

bool isWritable() const? ? //屬性是否可寫(xiě)

const char *name() const? ? ?//返回屬性的名稱(chēng)

QMetaMethod notifySignal() const ? ?//返回關(guān)聯(lián)了信號(hào)的屬性的QMetaMethod實(shí)例

int notifySignalIndex() const? ? ?//返回屬性關(guān)聯(lián)通知信號(hào)的索引

int propertyIndex() const? ? ? //返回屬性的索引

QVariant read(const QObject *object) const? ? //從給定對(duì)象object讀取屬性值

bool reset(QObject *object) const? ? ?//重置給定對(duì)象object的屬性值

int revision() const? ? ?//返回屬性指定的REVISION

QVariant::Type type() const? ? //返回屬性的類(lèi)型,具體類(lèi)型參考QVariant::Type

const char *typeName() const? ? ?//返回屬性的類(lèi)型名稱(chēng)

int userType() const? ?//返回屬性的用戶(hù)類(lèi)型,返回值是 QMetaType 已注冊(cè)的值之一

bool write(QObject *object, const QVariant &value) const? ? //將value作為屬性值寫(xiě)入對(duì)象object

這些屬性信息接口都與注冊(cè)屬性有關(guān),下面是關(guān)于屬性注冊(cè)宏Q_PROPERTY的介紹,Q_PROPERTY宏的使用語(yǔ)法如下:

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] )

在上述Q_PROPERTY宏定義的語(yǔ)法中,[ ]里的表示可選項(xiàng),大寫(xiě)字母的選項(xiàng)名(READ)是不能更改的,小寫(xiě)字母除類(lèi)型(int、bool等直接給定對(duì)應(yīng)類(lèi)型的值)外部分(type)是自行命名定義的,各選項(xiàng)之間用空格隔開(kāi),如:

下面是各選項(xiàng)的含義說(shuō)明:

type:表示屬性類(lèi)型,需是QVariant支持的類(lèi)型(具體參考之前QVariant 類(lèi)的介紹)

name:表示指定屬性名稱(chēng)

READ getFunction:其中READ表示可讀, getFunction表示讀取屬性值的函數(shù)名,可自行設(shè)定

注:若沒(méi)有指定 MEMBER 變量,則必須指定 READ 函數(shù),而且getFunction通常為const函數(shù),返回值為屬性的類(lèi)型或?qū)傩灶?lèi)型的引用

WRITE setFunction :WRITE表示寫(xiě)入, setFunction表示設(shè)置屬性值函數(shù)的名稱(chēng)

注:若屬性為只讀的則不能指定WRITE屬性,setFunction的返回值必須為void且參數(shù)只能有一個(gè)

MEMBER memberName :MEMBER表示指定成員, memberName表示被指定的類(lèi)成員變量名稱(chēng),類(lèi)成員變量的命名上與屬性應(yīng)該有區(qū)分(通常命名規(guī)范中類(lèi)成員變量前應(yīng)添加m_以表示成員變量而屬性無(wú)需添加如:成員變量m_value與屬性value ),該屬性用于設(shè)置成員變量memberName具備可讀可寫(xiě)性質(zhì);注:若沒(méi)指定READ則必須指定MEMBER

RESET resetFunction :表示重置屬性為默認(rèn)值, resetFunction不能有參數(shù)和返回值

NOTIFY notifySignal :表示指定與屬性關(guān)聯(lián)的信號(hào)notifySignal,即當(dāng)屬性值變化時(shí)就會(huì)觸發(fā)信號(hào)notifySignal

REVISION int :設(shè)置版本號(hào),默認(rèn)為0

DESIGNABLE bool:表示設(shè)置屬性在Qt設(shè)計(jì)師的屬性編輯器中是否可見(jiàn),默認(rèn)為true(可見(jiàn))

SCRIPTABLE bool:表示設(shè)置屬性是否可被腳本引擎訪(fǎng)問(wèn),默認(rèn)為true

STORED bool:設(shè)置保存對(duì)象狀態(tài)時(shí)是否必須保存屬性值,多數(shù)情況默認(rèn)為true

USER bool:設(shè)置屬性是否為可編輯屬性,每一個(gè)類(lèi)只能有一個(gè)USER屬性指定,默認(rèn)為false

CONSTANT:表示屬性值是常量,常量屬性不能指定WRITE與NOTIFY選項(xiàng)

FINAL:表示屬性不能被子類(lèi)重寫(xiě)

以上方式設(shè)置的是靜態(tài)屬性,在Qt中的類(lèi)還可以設(shè)定動(dòng)態(tài)屬性,所謂動(dòng)態(tài)屬性就是未使用Q_PROPERTY宏注冊(cè)而通過(guò)調(diào)用QObject::setProperty()方法添加的屬性。動(dòng)態(tài)屬性可通過(guò)設(shè)置無(wú)效的QVariant對(duì)象進(jìn)行刪除該動(dòng)態(tài)屬性,另外動(dòng)態(tài)屬性屬于類(lèi)對(duì)象的實(shí)例,不滿(mǎn)足元對(duì)象屬性機(jī)制,不能使用元對(duì)象獲取動(dòng)態(tài)屬性信息,但可使用QObject::property()進(jìn)行屬性值的獲取。

QVariant property(const char *name) const

作用:獲取指定名稱(chēng)屬性的值,若指定名稱(chēng)的屬性不存在則返回?zé)o效的QVariant

bool setProperty(const char *name, const QVariant &value)

作用:設(shè)置指定名稱(chēng)屬性的值,若設(shè)置的屬性已用Q_PROPERTY在類(lèi)中注冊(cè),且值類(lèi)型與屬性類(lèi)型兼容(Qt中可自動(dòng)轉(zhuǎn)換的類(lèi)型)則設(shè)定屬性值為value并返回true,若給定值類(lèi)型不兼容則值設(shè)定無(wú)效并返回false;若設(shè)置的屬性未使用宏定義Q_PROPERTY在類(lèi)中注冊(cè),則動(dòng)態(tài)添加指定名稱(chēng)的屬性并設(shè)置給定值,此時(shí)也返回false

使用setProperty和property方法也可以設(shè)置和獲取靜態(tài)屬性信息,若屬性有相關(guān)聯(lián)的讀取和寫(xiě)入函數(shù)(getFunction與setFunction,通常Qt中屬性獲取函數(shù)的名稱(chēng)定義時(shí)前面不添加get),則可使用對(duì)應(yīng)的讀寫(xiě)函數(shù)進(jìn)行讀取和寫(xiě)入。

文章來(lái)源:學(xué)到牛牛 www.xuedaon.com

qt屬性系統(tǒng)_學(xué)到牛牛的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
托克逊县| 新源县| 扬州市| 白河县| 甘谷县| 磐安县| 宝兴县| 永吉县| 奉新县| 米易县| 兴和县| 五莲县| 平昌县| 灵武市| 齐齐哈尔市| 扎囊县| 门源| 贵德县| 靖宇县| 九江县| 凤阳县| 山西省| 嘉兴市| 墨玉县| 酉阳| 原平市| 陈巴尔虎旗| 银川市| 灵丘县| 寿阳县| 辽阳市| 漠河县| 类乌齐县| 武威市| 都江堰市| 潞城市| 彭阳县| 资阳市| 潼南县| 瑞金市| 铜梁县|