Qt之實現360安全衛士主界面(三)

 這篇博文主要講述360安全衛士工具欄的建立;工具欄由圖片和文字組成,當鼠標移到工具欄按鈕上時,須要有些特徵表達該現象,如背景色變化等;固然鼠標單擊工具欄按鈕時,一樣也要有些特徵,而且這個特徵區別於鼠標移到按鈕上的特徵;寫起來有些拗口,我給你們先看看我實現的效果圖。html

      單擊按鈕時和鼠標移到按鈕上時,按鈕背景會不一樣,而且單擊其餘按鈕時,已單擊的那個按鈕背景應該恢復。下面講解其具體實現。安全

1、工具欄的建立app

      工具欄固然是自定義的部件了(繼承於QWidget),工具欄上的那些按鈕都是繼承於QToolButton;其中有9個按鈕,最右邊的是label;工具欄類的成員變量以下所示:ide

View Code

      首先固然是建立這些子部件了,和通常的沒啥區別:函數

View Code

      工具欄裏的按鈕和label都是手動定位(即設置位置信息),因此重寫了resizeEvent事件,在resizeEvent事件裏進行部件定位,以下所示:工具

View Code

      你們可能會想:在resizeEvent事件裏只對label進行定位了,那其餘9個按鈕了?由於其餘9個按鈕都是從最左邊(也就是0)計算相對位移,而label是從最右邊計算的,經過rect()函數得到工具欄的最右邊位置信息;按鈕在建立部件函數的時候就定位了位置,若是label也在那個時候定位位置的話是錯誤的,由於那是工具欄部件的大小是未知的,因此rect()函數返回的值也是未知的;當放在resizeEvent事件中進行處理時,工具欄部件顯示出來的時候,其大小都是能夠肯定的。字體

2、工具欄按鈕效果設置spa

      工具欄按鈕繼承於QToolButton;首先是設置按鈕的基本顯示效果了,去掉Qt自帶的效果;包括文本顏色,文本字體,樣式大小等,這些在我前幾篇的博文中有講解;代碼以下所示:指針

View Code

      OK,按鈕的基本效果就出來了,按鈕是透明的,只顯示圖片和文本,沒背景信息。
      再一步就是設置鼠標移到按鈕上的效果了,鼠標移到按鈕上時,背景呈現立體的半透明效果;當鼠標移上去時,設置移動標誌(m_bOver)爲ture,當鼠標離開按鈕時,設置移動標誌爲false;而後各自update發出重繪事件請求便可。code

View Code

      在重繪事件裏會對bOver進行判斷來繪製鼠標移到按鈕上的效果,後面講解到重繪時再細節描述。

      而後就是鼠標單擊按鈕時的效果了,和鼠標移到按鈕上的實現原理基本同樣;不過只是在槽函數中而不是由事件觸發了;信號和槽函數在構造函數中已經被鏈接上了,槽函數以下:

View Code

      其中SetPress函數即設置按下標誌(m_bPress)而後發送重繪請求。

View Code

      其中slot_pressed槽函數中發送了一個自定義信號signal_parent,在工具欄部件中會對該信號進行鏈接,其中信號的參數爲按鈕對象的指針。工具欄部件鏈接該信號的槽函數爲slot_set函數:

View Code

      整體意思是:例若有A,B,C三個按鈕在工具欄中,若是按下了A按鈕,這是按下B按鈕時,發送信號給工具欄,而後在工具欄對應的槽函數中進行指針值對比,若是不是B按鈕,就調用其餘對應按鈕的SetPress函數,並設置爲false,這樣A按鈕就沒有按下去的背景效果了(排他性)。

3、工具欄按鈕效果繪製

      繪製固然要在按鈕的paintEvent事件處理函數中實現了,代碼以下所示,代碼註釋的很詳細,我就很少說了:

View Code

      OK,這篇博文就寫完了,下一篇博文主要講解標題欄和狀態欄的構建了。

本文來源:http://www.cnblogs.com/appsucc/archive/2012/03/26/2417267.html

相關文章
相關標籤/搜索