win7系統不得不說是非常好用的,也是目前為止占用份額最大的作業系統,其中win7有個效果,將窗體拖動到頂部時會自動最大化,拖動到左側右側時會自動半屏顯示,再次拖動窗體到其他位置,會重新恢復之前的大小,這個效果還是比較人性化的,大大方便了很多使用者的操作習慣。
在qt中,如果是無邊框窗體,(有邊框窗體和作業系統窗體效果一致)並沒有相關的api介面來實現這個效果,必須自己寫**來模擬這個效果,原理很簡單,繫結事件過濾器,自動計算當前無邊框窗體的位置和滑鼠按下去的座標,當到達頂部或者左側右側時,自動設定該窗體的geometry即可。
為了復用**,我這裡繫結的全域性事件過濾器,這樣只需要無邊框窗體介面設定兩行即可,無需重複編碼。
無邊框窗體**:
this->setproperty("canmove", true);
this->setwindowflags(qt::framelesswindowhint | qt::windowsystemmenuhint | qt::windowminmaxbuttonshint);
核心**:
#include "qdesktopwidget.h"
#include "qevent.h"
#include "qwidget.h"
#include "qdebug.h"
//儲存桌面寬高以及全屏/左側半屏/右側半屏 區域
static qrect leftrect = qrect(0, 0, deskwidth / 2, deskheight);
static qrect rightrect = qrect(deskwidth / 2, 0, deskwidth / 2, deskheight);
bool autorect = w->property("autorect").tobool();
static qpoint mousepoint;
static bool mousepressed = false;
qmouseevent *event = static_cast(evt);
if (event->type() == qevent::mousebuttonpress)
} else if (event->type() == qevent::mousebuttonrelease) else if (x < offset) else if (x > (deskwidth - offset))
}return true;
} else if (event->type() == qevent::mousemove) else
return true;}}
return qobject::eventfilter(obj, evt);}
WPF程式禁止win7視窗自動最大化
相信用過windows7的朋友都知道,當我們將某個視窗拖拽到螢幕的頂部時視窗就會自動最大化,拖動到螢幕左右測邊緣時,視窗會佔據半個螢幕大小。這是windows7帶來的新功能新亮點之一。但是如果在具體專案具體需求時,windows7的這種特性往往會阻礙我們意願,成為我們的絆腳石。那麼該篇文章介紹,wp...
WPF程式禁止win7視窗自動最大化
相信用過windows7的朋友都知道,當我們將某個視窗拖拽到螢幕的頂部時視窗就會自動最大化,拖動到螢幕左右測邊緣時,視窗會佔據半個螢幕大小。這是windows7帶來的新功能新亮點之一。但是如果在具體專案具體需求時,windows7的這種特性往往會阻礙我們意願,成為我們的絆腳石。那麼該篇文章介紹,wp...
Win7視窗最大化和最小化快捷鍵
windows 鍵 方向鍵 使當前使用的視窗最大化。windows 鍵 方向鍵 使當前使用中的最大化視窗恢復正常顯示 或者如果當前視窗不是最大化狀態,則會將其最小化。windows 鍵 方向鍵 windows 鍵 方向鍵 aero snap 使正在使用中的視窗貼向螢幕左側 右側,而只占用50 的顯示...