博客地址已更改,文章數量較多不便批量修改,若想訪問源文請到 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自帶的基礎圖標
- QToolButton *toolButton_mini;//最小化
- QToolButton *toolButton_max;//最大化
- QToolButton *toolButton_close;//關閉
- toolButton_mini->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMinButton));
- toolButton_max->setIcon(style()->standardPixmap(QStyle::SP_TitleBarMaxButton));
- toolButton_close->setIcon(style()->standardPixmap(QStyle::SP_TitleBarCloseButton));
將上述控件的點擊事件與相應函數connect即可實現對應功能,注意最大化分為“最大化”和“還原”兩個狀態,且Qt提供了兩個函數,不能直接connect。對應函數名分別為:
- showMinimized()
- showNormal()//還原
- showMaximized()//最大化
- close()
2. QToolBar基本使用
直接new一個控件,然后再窗口類中使用:
- addToolBar(this);
實現此控件的添加
通過QToolBar *a;a->asetMovable(false);實現禁止移動,同時取消工具欄左側的移動標示按鈕
3. QToolBar控件局右顯示
一般關閉等按鈕在右側,QToolBar默認在左側,可以在中間添加一個QWidget實現占位,從而保證按鈕局右
- QWidget *toolBar_seat = new QWidget;
- toolBar_seat->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//長寬自動擴展
- addWidget(toolBar_seat);
4. 雙擊標題欄最大化
直接重寫QObject的鼠標雙擊事件
- protected:
- void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) {
- if(Qt::LeftButton == event->button())
- MaximizeButtonClicked();//此處調用最大化/還原按鈕點擊槽
- event->ignore();
- }
5. 窗口拖拽
使用自定義標題欄以后,窗口將失去拖拽標題欄移動的功能,通過此步驟可以重現,同樣重寫對應鼠標事件
- virtual void mousePressEvent(QMouseEvent *event);
- virtual void mouseReleaseEvent(QMouseEvent *event);
- virtual void mouseMoveEvent(QMouseEvent *event);
主要原理是在按下時記錄按下狀態及按下時的窗口坐標,抬起時取消狀態,在鼠標移動時判斷狀態並根據當前坐標差進行移動。
- event->globalPos()//獲取系統下全局坐標
- widget=window();//獲取主窗口指針
- qwidget->move()//移動窗口
具體源碼請見GitHub:QtWidgetsExamples