Qt自定義標題欄


博客地址已更改,文章數量較多不便批量修改,若想訪問源文請到 coologic博客 查閱,網址:www.coologic.cn

如本文記錄地址為 techieliang.com/A/B/C/ 請改為 www.coologic.cn/A/B/C/ 即可查閱

 

版權聲明:若無來源注明, Techie亮博客文章均為原創。 轉載請以鏈接形式標明本文標題和地址:
本文標題:Qt自定義標題欄     本文地址: http://techieliang.com/2017/11/326/
代碼較多,顯示效果不佳,建議原地址查看

圖片

1. 標題欄的最大化、最小化、關閉按鈕圖標

此類按鈕建議使用QToolButton實現,圖標可以自定義也可以用Qt自帶的基礎圖標

  1. QToolButton *toolButton_mini;//最小化
  2. QToolButton *toolButton_max;//最大化
  3. QToolButton *toolButton_close;//關閉
  4. toolButton_mini->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMinButton));
  5. toolButton_max->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMaxButton));
  6. toolButton_close->setIcon(style()->standardPixmap(QStyle::SP_TitleBarCloseButton));

將上述控件的點擊事件與相應函數connect即可實現對應功能,注意最大化分為“最大化”和“還原”兩個狀態,且Qt提供了兩個函數,不能直接connect。對應函數名分別為:

  1. showMinimized()
  2. showNormal()//還原
  3. showMaximized()//最大化
  4. close()

2. QToolBar基本使用

直接new一個控件,然后再窗口類中使用:

  1. addToolBar(this);

實現此控件的添加

通過QToolBar *a;a->asetMovable(false);實現禁止移動,同時取消工具欄左側的移動標示按鈕

3. QToolBar控件局右顯示

一般關閉等按鈕在右側,QToolBar默認在左側,可以在中間添加一個QWidget實現占位,從而保證按鈕局右

  1. QWidget *toolBar_seat = new QWidget;
  2. toolBar_seat->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//長寬自動擴展
  3. addWidget(toolBar_seat);

4. 雙擊標題欄最大化

直接重寫QObject的鼠標雙擊事件

  1. protected:
  2. void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) {
  3. if(Qt::LeftButton == event->button())
  4. MaximizeButtonClicked();//此處調用最大化/還原按鈕點擊槽
  5. event->ignore();
  6. }

5. 窗口拖拽

使用自定義標題欄以后,窗口將失去拖拽標題欄移動的功能,通過此步驟可以重現,同樣重寫對應鼠標事件

  1. virtual void mousePressEvent(QMouseEvent *event);
  2. virtual void mouseReleaseEvent(QMouseEvent *event);
  3. virtual void mouseMoveEvent(QMouseEvent *event);

主要原理是在按下時記錄按下狀態及按下時的窗口坐標,抬起時取消狀態,在鼠標移動時判斷狀態並根據當前坐標差進行移動。

  1. event->globalPos()//獲取系統下全局坐標
  2. widget=window();//獲取主窗口指針
  3. qwidget->move()//移動窗口

具體源碼請見GitHubQtWidgetsExamples

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM