使用QProxyStyle定製QMenu (一)
阿新 • • 發佈:2019-02-13
定製QWidget的樣式的方式
- 使用Qt Style Sheets(qss)實現定製
- 繼承QStyle實現定製
Qt Style Sheets的方式請參考我翻譯的兩篇文章:
(翻譯總有不完善的地方,請儘量參考英文原文)
後面的幾篇文章我將會介紹如何使用繼承QStyle的方式定製QMenu,先放出一個成果圖:
開始定製你的widgets
如果你準備發開自定義樣式的widgets並準備讓它們在所有平臺上看起來都一樣,那麼你可以使用QStyle的一些函式分別實現widget的部分繪製過程,這些函式就包括:
大部分的QStyle繪製函式(上面躺著那幾個貨)會使用到以下的幾個引數:
- 一個指明哪個圖形元素將被繪製的列舉值
- 一個QStyleOption用於指明該圖形元素應該如何以及在哪裡渲染
- 一個用於繪製該元素的QPainter
- 一個將被繪製的QWidget(這是可選的)
建立定製的style
這裡有兩種方式建立定製的style:
靜態的方式:
1.選擇一個已有的QStyle類並繼承它,實現某些定製行為的函式
2.從頭實現QStyle的所有函式(當然這個是比較累人的,一般你也不用從頭到尾寫)動態的方式:
官方文件說,去看QProxyStyle的說明喔,我沒看到哪裡有說什麼動態方式,所以我就沒有搞明白到底動態是怎麼個動態法,大家有清楚的麻煩跟我說一下啦。
所有後面一堆要說到的都是靜態方式的(不知道什麼區別,反正文件就說這是靜態方式的,那就這樣叫著吧)。最通常作為基類用的就是QCommonStyle(並不是QStyle)這是因為Qt需要它的styles就是QCommonStyle。
事實上QCommonStyle是繼承於QStyle的,而QProxyStyle則是繼承於QCommonStyle的,所以我們將要用到QProxyStyle來實現我們的樣式定製。
好了,上面列的這些就是你實現自定義widget重點要弄清楚的東西,具體的解釋後面使用的時候詳細體會吧,我就不像文件一點點都寫這裡了。需要的請直接參考QStyle的說明文件。