Qt之QFlags及相關巨集學習小結

2021-08-26 04:08:46 字數 1450 閱讀 6772

準備為我們的5軸工作台定義一下控制介面

enum axisid ;

class stagecontrol:public qobject

;class stagecontrol:public qobject

; //q_enums(axisid)

q_declare_flags(axisids, axisid)

q_flags(axisids)

stagecontrol()}}

};

結果如下:

name:  axisids 

axis_x

axis_y

axis_z

axis_r

axis_t

有點意思,我們可以對比一下,只使用 q_enums 時的結果

name:  axisid 

axis_x

axis_y

axis_z

axis_r

axis_t

呵呵,兩個都用的呢?

name:  axisid 

axis_x

axis_y

axis_z

axis_r

axis_t

name: axisids

axis_x

axis_y

axis_z

axis_r

axis_t

相當於元物件系統中有了兩個qmetaenum物件!!

瞅瞅moc生成的檔案

當q_enums和q_flags同時使用時,確實是生成兩個qmetaenum物件。

static const uint qt_meta_data_stagecontrol = ;

static const char qt_meta_stringdata_stagecontrol = ;

一時間突然明白,為何在manual中

enum qt::windowtype

flags qt::windowflags

enum qt::windowstate

flags qt::windowstates

總是成對的介紹!

原來,潛意識中,總是覺得windowtype的列舉值全是widget/window這種單值,而dialog屬於windowflags

enum windowtype 

q_declare_flags(windowflags, windowtype)

原來根本就沒有這種區別!

回到一開始的例子,我最常用的是x、y、r這三個軸,於是,我可以這樣來定義enum

enum axisid;

亂七八糟,暫記於此。

QT之Qt之Q PROPERTY巨集理解

qt中的q property巨集在qt中是很常用的,那麼它有什麼作用呢?qt提供了乙個絕妙的屬性系統,q property 是乙個巨集,用來在乙個類中宣告乙個屬性property,由於該巨集是qt特有的,需要用moc進行編譯,故必須繼承於qobject類。q property type name r...

Qt之Q OBJECT巨集的作用

只有加入了q object,你才能使用qt中的signal和slot機制。凡是qobject類 不管是直接子類還是間接子類 都應該在第一行 寫上q object。不管是不是使用訊號槽,都應該新增這個巨集。這時候,就必須在標頭檔案派生類的時候,首先像下面那樣引入q object巨集 class mym...

QT相關的FAQ及Trouble Shooting

1,qwidget的管理 一般情況下,qwidget獨立建立堆物件時,要手工維護其消亡,但qwidget如果有父widget 不是繼承關係,而是指包含關係,比如乙個qtabwidget加入了乙個qwidget做為tab,這個qwidget的父就是qtabwidget 父widget將會在銷毀時,de...