1. 程式人生 > >使用QProxyStyle定製QMenu (一)

使用QProxyStyle定製QMenu (一)

定製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的說明文件