日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT自定义MainWindow

發布時間:2023/11/30 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT自定义MainWindow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.開發環境:Qt 4.7.3 + MinGW 32bit (MSVC2015 32bit)

2.實現大綱:

????????? 1)自定義邊框,標題欄,工具欄,內容欄,狀態欄(后面三個代碼中沒有實現實現)

????????? 2)重寫鼠標事件來控制可以自由移動框體

????????? 3)樣式文件使用qss實現,UI設計/數據/控制分離,方便二次開發

3.具體實現:

??????? 1)通常情況下,linux或者window系統下的QMainwindow的邊框樣式比較原始不太美觀,Qt提供了可以舍棄原有的邊框,然后自定義。具體設置參數如下:

setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint); //配置邊框屬性,無邊框 setAttribute(Qt::WA_TranslucentBackground); //設置背景半透明

???????? 2)關于框體中框線的樣式設計,可以采用添加QFrame組件,通過設計QFrame的border相關屬性來設置邊框線,但是在設計的過程中發現,如果直接添加在mainwindow中添加QFrame組件,然后再設置border屬性,發現border屬性無效。解決方案可以在QMainwindow和QFrame之間添加一個QWidget作為“畫布”,來顯示QFrame的邊框樣式。

??????? 3)一般來說,window的標題欄一般包括圖標,標題大綱,隱藏/放大/還原/關閉等組件,因此可以添加一個QFrame + QHBoxLayout來配合實現,另外按鈕推薦使用QToolButton(使用QPushButton也可以,但是需要設置setAutoDefault為false,否則會在設計Dialog彈框事埋下隱藏的bug,即關于enter按鍵的響應問題),并且設置其hover屬性和tooltip(懸放時提示按鈕功能)等屬性。

?????? 4)接下來需要重新定義鼠標的事件來實現鼠標拖拽mainwindow功能,主要是關于系統的四個函數的復寫,通過坐標的決定坐標globalPos()和相對坐標pos()直接的變換來記錄移動的距離,從而實現窗體的移動,具體如下:

void mouseReleaseEvent(QMouseEvent *event); //鼠標左鍵釋放 void mouseMoveEvent(QMouseEvent *event); //鼠標左鍵一直按著,系統提供了event->buttons()來專門判斷是否按著 void mousePressEvent(QMouseEvent *event); //鼠標左鍵按下, 且按下的坐標在標題欄上 void mouseDoubleClickEvent(QMouseEvent *event); //雙擊事件也就是完成標題欄上的放大按鈕的相關功能

?

4.具體代碼見下載地址:https://download.csdn.net/my/uploads

5.實現截圖:

?

總結

以上是生活随笔為你收集整理的QT自定义MainWindow的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。