Qt隱藏系統標題欄,使用自定義標題欄
一.前言
今天我們來實現自定義標題欄的實現,這裡面用到了佈局,滑鼠事件重寫等知識點,首先還是自定義標題欄的創作,像下面這樣,可放大,可縮小,並且隨著窗體大小的改變,控制元件做自適應調整。有沒有感覺狗子的介面做的越來越好看,哈哈,其實只是想告訴大家,孰能生巧,第一次可能很醜,慢慢來嘛,我第一次也被人噴過。廢話不多說,看實現。
二.實現
首先還是先把介面搭建出來,如上圖,我知道有很多不會搭建這個佈局,確實,我剛學習的時候,書中關於佈局也是草草略過,我之前寫過一個佈局的介紹,大家可以看一下,qt 如何設計好佈局和漂亮的介面,當然,你看了其中有關佈局的知識,相信我,你依舊還是不能隨心所欲的布成自己想要的局。你去百度,關於佈局的知識,其實和我上面寫的一樣,其實這裡面還隱藏一些配合,只不過可能這個知識點對於會佈局的人來說太簡單了,他們會選擇性略過。
比如下面幾個我能想到的問題:
- 對頂級視窗進行佈局,佈局和窗體有一定距離;
解決方法:選中頂級窗體,屬性裡面找到佈局,將紅括號內的值改為0,佈局和窗體的距離就為0.
- 拖了一個佈局,並且將相關控制元件加入佈局,但是一旦將頂級視窗新增布局,控制元件大小就會不可控;
解決方法:之所以如此,是因為我們沒有指定控制元件最大值和最小值,這也是為什麼大家看到的軟體,有一些控制元件最大化後跟隨介面變大,而一些控制元件是不變化的,就比如最小化,最大化控制元件等等。大家只需要選中控制元件,右鍵選中選中大小限定,就會得到我們想要的大小。
- 介面放大或者縮小後,控制元件位置問題;
解決方法:要運用彈簧(horizontalSpacer)這個功能,並靈活運用sizetype這個屬性,例如Minimum(最小大小),Maximum(最大大小),Expanding(自適應)等等,比如我們選擇了Maximum,介面放大時,我們就不用這個彈簧放大。
然後佈局就寫到這裡,涉及的有關控制元件背景圖可加我qq2506897252獲取,無償的。
下面說一下功能的實現,有細心讀者可能發現上面的動態圖有兩個標題欄,這不是騙人嘛,我想說不是騙人,到最後白色的標題欄我們是要隱藏的,為了文章的前後順序,我們暫時先把他留下。
先將最小化,最大化以及關閉按鈕的功能進行實現,這裡可以選擇程式碼實現,也可以在ui介面實現,只不過ui介面實現有一些侷限性,由於我們目的是使用自定義標題欄,所以這裡直接在ui介面進行實現。
進行訊號和槽繫結後,我們現在就可以使用自定義的標題欄來實現最小化,最大化,關閉,接下來就是將系統的標籤欄進行隱藏,如果在這之前,就將系統的標題欄隱藏,那麼對於編譯後生成的軟體關閉將是不方便的。
在主窗體的建構函式加入this->setWindowFlags(Qt::FramelessWindowHint);
,編譯執行即可隱藏系統標籤欄。
隱藏後,會發現無法我們無法移動視窗了,想要移動視窗,我們需要進行滑鼠事件重寫,包括mousePressEvent(QMouseEvent *event)
,mouseMoveEvent(QMouseEvent *event)
,mouseReleaseEvent(QMouseEvent *event)
。
首先在mainwindow.h中宣告這三個函式:
void mousePressEvent(QMouseEvent *event);//滑鼠點選
void mouseMoveEvent(QMouseEvent *event);//滑鼠移動
void mouseReleaseEvent(QMouseEvent *event);//滑鼠釋放
//新增類成員m_point(QPoint型別)
QPoint m_point;
mianwindow.cpp中進行定義:
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_point = event->globalPos()-frameGeometry().topLeft();
//滑鼠位置減去左上角的左邊
//可替換為m_point = event->pos();
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
move(event->globalPos() - m_point);
//滑鼠位置減去按下點的座標
//可替換為event->pos() - m_point + pos();
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
Q_UNUSED(event);
//Q_UNUSED() 沒有實質性的作用,用來避免編譯器警告
}
對應的m_point = event->globalPos()-frameGeometry().topLeft();可替換為m_point = event->pos();
別忘了加入標頭檔案
#include<QMouseEvent> #include<QPoint>
完成上述程式碼,編譯執行,視窗可通過滑鼠移動。
相關文章
- Qt隱藏標題欄QT
- AppCompatActivity隱藏標題欄APP
- Android 自定義標題欄Android
- 如何設定Android標題欄的自定義功能和隱藏功能Android
- Android studio隱藏標題欄Android
- 視訊直播系統原始碼,頂部標題欄的隱藏和標題修改原始碼
- UWP中實現自定義標題欄
- iOS系統導航欄自定義標題動畫跳變解析iOS動畫
- .NET 隱藏/自定義windows系統游標Windows
- Qt 子視窗 隱藏標題欄的圖示,隱藏在工作列上的圖示QT
- HarmonyOS NEXT 5.0自定義增強版導航欄元件|鴻蒙ArkUI自定義標題欄元件鴻蒙UI
- Android專案中自定義頂部標題欄Android
- Android螢幕中隱藏標題欄和狀態列Android
- Android自定義TitleBar 自定義標題欄 並進行事件處理Android事件
- fltk-rs 隱藏標題欄但顯示工作列圖示
- 在執行時顯示或隱藏窗體的標題欄 (轉)
- 直播平臺軟體開發,實現自定義標題欄
- 炫酷:一句程式碼實現標題欄、導航欄滑動隱藏,ByeBurger庫的使用和實現
- Win10怎麼修改標題欄顏色 win10系統標題欄顏色的修改步驟Win10
- Android中取消系統標題欄的幾種方式Android
- ReactNative 使用react-navigation Android 標題欄標題居中適配ReactNavigationAndroid
- Qt介面設計--側邊欄隱藏和滑出QT
- electron+vue製作桌面應用--自定義標題欄最大/小化和關閉Vue
- windows10系統下讓視窗標題欄透明的方法Windows
- 元件化封裝之標題欄Toolbar元件化封裝
- java 部分隱藏欄位Java
- 自定義標籤出現問題
- 直播app開發,封裝式標題欄APP封裝
- android去掉標題欄和狀態列Android
- Android studio | 去除頂部標題欄Android
- Mac系統隱藏dock欄的詳細操作步驟?Mac
- 徹底解決windows標題欄字型變小問題Windows
- 直播系統程式碼,給標題欄新增陰影效果和圓角效果
- ElementUI側邊欄導航選單隱藏顯示問題UI
- win10 如何隱藏語言欄_win10如何把語言欄隱藏Win10
- jQuery 項卡標題欄閃爍提示新資訊jQuery
- Android Actionbar(標題欄)的背景設定Android
- android應用中去掉標題欄的方法Android