QT之Qt之Q PROPERTY巨集理解

2021-10-24 20:30:14 字數 2358 閱讀 6029

qt中的q_property巨集在qt中是很常用的,那麼它有什麼作用呢? 

qt提供了乙個絕妙的屬性系統,q_property()是乙個巨集,用來在乙個類中宣告乙個屬性property,由於該巨集是qt特有的,需要用moc進行編譯,故必須繼承於qobject類。

q_property(type name

read getfunction

[write setfunction]

[reset resetfunction]

[notify notifysignal]

[designable bool]

[scriptable bool]

[stored bool]

[user bool]

[constant]

[final])

之前一直在使用vs開發c++程式,接觸過開發ocx控制項會有控制項屬性設定,qt這裡的屬性系統可以和之前的知識聯絡起來,qt的屬性功能使得我們可以選擇訪問資料成員的方式,屬性就像是類的資料成員,但是在元物件系統中,它的其他特性是到處可見的(相比較於類成員的一般情況下私有化)。

我們使用這個巨集的時候,注意兩個問題:

1)型別,屬性名和read(讀)方法是必須的。也就是前三個引數可必須有的。型別可以是qvariant支援的任一型別,又或者是我們自定義的型別,其他是可選的。下面的title屬性定義可以這麼來說明:定義乙個屬性title,型別是qstring,讀title的方法是title()函式,寫title的方法是settitle,這裡user表示是否使用者自定義型別,這裡應該設定為false。

2)屬性宣告完了以後,我們還需要進行讀寫函式的宣告和定義

為什麼要使用它呢?在**使用它呢?

答:qt中類的屬性是給指令碼和元物件系統用的,比如qtscript,qml,或者qobject::property/setproperty……,主要就是用來進行屬性封裝,在具體的指令碼,庫,qml開發中必須使用。

最常見的是在qml中訪問c++,通過c++類暴露屬性來使用,接上面例項如下:

1、新建qt quick工程:qt property

2、新建c++類testproperty,公有繼承於qobject

3、為testproperty類設定上述屬性title

q_property(qstring title read title write settitle notify titlechanged);

4、屬性讀寫函式宣告與實現

testproperty.h 12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

#ifndef testproperty_h

#define testproperty_h

#include 

class testproperty : public qobject

;#endif // testproperty_h

testproperty.cpp12

3456

78910

1112

1314

1516

1718

#include "testproperty.h"

testproperty::testproperty(qobject *parent) : qobject(parent)

qstring testproperty::title()

void testproperty::settitle(qstring strtitle)

5、在main函式中註冊這個類,匯出到qml中

main.cpp12

3456

78910

1112

1314

1516

1718

1920

6、在qml中呼叫title屬性

main.qml12

3456

78910

1112

1314

1516

1718

1920

import qtquick 2.9

import qtquick.window 2.2

import testproperty 1.0

window 

component.oncompleted: 

}執行後:

QT之結構 Q PROPERTY概念

qt提供了乙個成熟的屬性系統,但是作為乙個跨平台的且與編譯器無關的庫,qt不依賴於非標準的編譯器功能例如 property or property qt的強大之處在於它可以支援任何標準的c 編譯器。qt是基於 meta object system 元物件 和signals and slots 訊號槽...

Qt系列 之Qt之打包發布

date 2019 1 31 發布方式 qt發布的時候,通常使用兩種方式 1 靜態編譯 2 動態編譯 靜態編譯 把相關聯的庫一併引入可執行程式,雖然發布簡單,但可執行程式較大。動態編譯 相關聯的庫,以dll的形式引用,不被包含進可執行程式,發布不方便,但可執行程式較小。靜態發布雖然不需要較多的dll...

Qt中Q PROPERTY定義屬性以及屬性的使用

q property type name read getfunction 屬性名 write setfunction 讀函式 reset resetfunction notify notifysignal designable bool scriptable bool stored bool us...