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>
完成上述程式碼,編譯執行,視窗可通過滑鼠移動。
相關文章
- AppCompatActivity隱藏標題欄APP
- 視訊直播系統原始碼,頂部標題欄的隱藏和標題修改原始碼
- Qt 子視窗 隱藏標題欄的圖示,隱藏在工作列上的圖示QT
- .NET 隱藏/自定義windows系統游標Windows
- iOS系統導航欄自定義標題動畫跳變解析iOS動畫
- HarmonyOS NEXT 5.0自定義增強版導航欄元件|鴻蒙ArkUI自定義標題欄元件鴻蒙UI
- fltk-rs 隱藏標題欄但顯示工作列圖示
- 直播平臺軟體開發,實現自定義標題欄
- 導航欄的隱藏問題
- Android中取消系統標題欄的幾種方式Android
- Qt介面設計--側邊欄隱藏和滑出QT
- Android studio | 去除頂部標題欄Android
- windows10系統下讓視窗標題欄透明的方法Windows
- 直播app開發,封裝式標題欄APP封裝
- Mac系統隱藏dock欄的詳細操作步驟?Mac
- 直播系統程式碼,給標題欄新增陰影效果和圓角效果
- ElementUI側邊欄導航選單隱藏顯示問題UI
- win10 如何隱藏語言欄_win10如何把語言欄隱藏Win10
- 聊天平臺原始碼,標題過長自動應用摺疊式標題欄原始碼
- iPhone怎麼隱藏底部Dock欄桌布?iOS12隱藏Dock欄桌布設定教程iPhoneiOS
- win10系統怎麼隱藏關閉桌面搜尋欄Win10
- 直播系統平臺原始碼隱藏虛擬導航欄,禁止下拉通知欄,禁止上滑出虛擬導航欄原始碼
- chrome刪除 標題欄滑鼠懸停提示網址Chrome
- jQuery 項卡標題欄閃爍提示新資訊jQuery
- PhpCms自定義欄位的使用說明PHP
- Elementor如何隱藏頁面上的標題(2種辦法)
- uniapp自定義導航欄APP
- 直播電商平臺開發,動態去除系統自帶標題欄、狀態列
- uni-app動態修改頂部導航欄標題APP
- android自定義View——座標系AndroidView
- 使用OGG新增唯一標識欄位到目標表
- 基於鴻蒙ArkUI封裝標題欄TitleBar導航元件鴻蒙UI封裝元件
- 自定義按鈕 圖片標題位置隨意放置
- 建模:標識欄位 - Dan
- 使用欄位格式化來自定義SharePoint(八)
- 使用欄位格式化來自定義SharePoint(七)
- 使用欄位格式化來自定義SharePoint(四)
- 使用欄位格式化來自定義SharePoint(二)