QFlags


Qt 的QFlags類型
2009-03-12 10:07

Qt裏面定義了大量的枚舉類型,有些類型的內部元素可以並列的。例如Qt::AlignmentFlag類型,包括
The horizontal flags are:

Qt::AlignLeft 0x0001 Aligns with the left edge.
Qt::AlignRight 0x0002 Aligns with the right edge.
Qt::AlignHCenter 0x0004 Centers horizontally in the available space.
Qt::AlignJustify 0x0008 Justifies the text in the available space.

The vertical flags are:

Constant Value Description
Qt::AlignTop 0x0020 Aligns with the top.
Qt::AlignBottom 0x0040 Aligns with the bottom.
Qt::AlignVCenter

我們可以用Qt::AlignTop | Qt::AlignLeft 來表示左上角。假設一個函數接受位置作爲參數,那麼一般來說我們需要把這個函數的參數定義成int類型。這樣就造成傳遞給函數的參數非法(132),但是函數卻不能靜態檢查出來。把錯誤留給了運行階段。

Qt定義了一個Flag的類,對於一個enum類型,通過聲明 Q_DECLARE_FLAGS ( FlagsEnum ) 就會定義一個新的類型Flags。上面的函數就可以用Flags做參數了。

Q_DECLARE_FLAGS ( FlagsEnum ) 擴展成了 typedef QFlags<Enum> Flags;

例如:Qt::AlignmentFlag 就定義了Qt::Alignment作爲它的Flags。在使用的時候我們直接定義
setAlignment(Qt::Alignment) 的函數就可以接受 
Qt::AlignTop | Qt::AlignLeft 這樣的參數了。其他的操作和參考Qt文檔 qflags。

發佈了1 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章