qt 拖拽 修改大小

2021-09-08 18:36:39 字數 2767 閱讀 4824

寫次篇文章之前,qt視窗的放大縮小和拖拽我都是通過setgeometry方法實現的,但是作為windows程式,windows支援橡 皮筋式(拖拽時有乙個虛框)拖拽和拉伸。通過setgeometry方式實現功能是沒有這種效果,幸好qt5中提供了乙個本地事件處理介面 nativeevent,具體功能可以看幫助文件,本文只講述用該介面實現視窗放大、縮小和拖拽,具體實現**如下:

1

virtual

bool nativeevent(const qbytearray &, void *, long *) q_decl_override;23

1617

else

1819

2425}26

27如下方法是在qt事件迴圈之前呼叫的,如果返回值為true,則該事件迴圈不進入qt事件迴圈,否則進入,result是乙個輸出型引數,我們可以通過賦值給result不同的值,來控制滑鼠的狀態

2829

htcaption:滑鼠可以拖拽

3031 htleft /htright:滑鼠可以左右拖拽

3233 httop /htbottom:滑鼠可以上下拖拽

3435 httopleft /htbottomright:滑鼠可以左上或者右下拖拽

3637 httopright /htbottomleft:滑鼠可以右上或者左下拖拽

圖1 拖拽

圖2 修改大小 

如上圖所示,紅色箭頭指的就是拖拽和改變大小時出現的白色框

這樣處理後的標題欄(m_windowtitle)不能接受到mousedoubleclickevent事件,因此還需要自己手動修改視窗大小,**如下,新增到上述swtich語句中

1

case

wm_nclbuttondblclk:23

1415

else

1617

2223 res = false;24

25}2627

break;

view code

注意:要支援windows的這種特性,需要通過**設定

showfullwindow:true代表拖動和改變大小時視窗實時變化;false代表橡皮筋式放大,如上圖所示

systemparametersinfo(spi_setdragfullwindows, showfullwindow ? true : false, null, 0);

時隔10幾天,當我測試新功能時發現乙個問題,特此記錄:

在xp系統上qt程式沒有工作列選單,但是win7和win10正常,給qt程式手動新增​qt::windowsystemmenuhint屬性後,3系統都有選單,但是nativeevent方法不能放大縮小了,解決辦法暫時沒找到

今兒突然想到qmainwindow,這個右下角有乙個可以支援放大做小的功能,最後看了原始碼,發現由乙個qsizegrip類,這個類可以實現所在頂層 qwindow的放大和縮小,特此記錄​,此時結果如下圖3。這個類支援橡皮筋放大縮小,和前文所述nativeevent實現效果相同

圖3 qsizegrip例項

Mysql修改大小寫敏感

今天在centos6.5系統中,將mysql公升級到5.6版本,發現mysql資料庫和表名對大小寫敏感,列名對大小寫不敏感。原因是 在 mysql 中,資料庫和表對應於那些目錄下的目錄和檔案。因而,作業系統的敏感性決定資料庫和表命名的大小寫敏感。這就意味著資料庫和表名在 windows 中是大小寫不...

關於QT4 8窗體更改大小

mainwindow mainwindow qwidget parent qmainwindow parent ui new ui mainwindow ui setupui this this setgeometry 200,100,800,600 this resize 800,600 this...

032JS 樣式屬性修改大小顏色

doctype html en utf 8 viewport content width device width,initial scale 1.0 x ua compatible content ie edge document title div style head 可以通過js修改元素的大...