Qt:自定義標題欄(QMainWindow)

簡述

       通過qss自定義外觀後,發現標題欄的外觀未發生變化,與整體的風格不融洽。因爲程序的最外層邊框加載的是系統本地的窗口。爲了使風格統一,我們可以自定義一個標題欄來顯示窗體的圖標、標題,以及控制窗體最小化、最大化、關閉的按鈕,並控制其風格與主界面一致。

       網上有很多Qt自定義標題欄的代碼。這裏分享一個我覺得較好的自定義標題欄。與其他代碼不同,其把對主窗口的相關處理事件都封裝在標題欄類中,使用的時候,通過安裝事件監聽器來完成對主窗的控制。效果如下圖所示:

        

                             系統邊框                                                                                                   自定義邊框


上面是對對話框自定義標題欄,使用時,除了安裝監聽器,需要把標題欄放置在對話框佈局的頂端

[cpp] view plain copy
  1. //自定義標題欄  
  2.    setWindowFlags(Qt::FramelessWindowHint | windowFlags());  
  3.    TitleBar *pTitleBar = new TitleBar(this);  
  4.    installEventFilter(pTitleBar);  
  5.    qobject_cast<QVBoxLayout *>(this->layout())->insertWidget(0,pTitleBar);  

這裏額外說明是對QmainWindow添加自定義邊框,在對QmainWindow類調用this->layout返回的是空,得不到其佈局,QMainWindow的佈局是已經定義好的,不能夠進行改變。爲了能添加自定義邊框,在外面加了一個QWidget. 將自定義標題欄和QMainWindow添加到QWidget中。同時爲了使得Qmainwindow能夠嵌入到QWidget中,需要添加如下設置:

[cpp] view plain copy
  1. this->setWindowFlags(Qt::Widget);  


效果:


參考文獻:

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