通過上一節内容,我們實作了窗體的縮放,功能很不錯,但是很遺憾-不支援跨平台!如果對于多平台來說,這是一個硬傷,是以,我們急需要一個能夠支援跨平台的實作方案。
在網上看到過很多不同的實作方式,多多少少會存在一些問題-要麼融合度太高、要麼不能很好地進行移動、縮放。基于前人的分享與總結,最後,我花了很長時間來完善。獨樂樂不如衆樂樂,既然純開源-那就全部分享出來。
<a href="#%e7%ae%80%e8%bf%b0">簡述</a>
<a href="#%e6%95%88%e6%9e%9c">效果</a>
<a href="#%e7%aa%97%e4%bd%93%e7%bc%a9%e6%94%be">窗體縮放</a>
<a href="#%e5%ae%9e%e7%8e%b0">實作</a>
<a href="#%e6%8e%a5%e5%8f%a3%e8%af%b4%e6%98%8e">接口說明</a>
<a href="#%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f">使用方式</a>
<a href="#%e5%b9%b3%e5%8f%b0%e6%94%af%e6%8c%81">平台支援</a>

frameless_helper.h
frameless_helper.cpp
framelesshelperprivate類
cursorposcalculator類
widgetdata類
framelesshelper類
framelesshelperprivate
存儲界面對應的資料集合,以及是否可移動、可縮放屬性
cursorposcalculator
計算滑鼠是否位于左、上、右、下、左上角、左下角、右上角、右下角
widgetdata
更新滑鼠樣式、移動窗體、縮放窗體
framelesshelper
激活窗體、移除窗體、設定窗體移動、窗體縮放、橡皮筋移動、橡皮筋縮放、邊框的寬度、标題欄高度等
代碼很多,我就不詳細解答了,裡面主要的接口我都添加了注釋。其它接口的命名也是比較規範的-見名知義。
這裡的this指的是要處理的窗體。
因為使用的是純qt實作,是以支援跨平台!win7、win10、redhat7.0已測試通過,其它平台尚未測試,有需要的童鞋可自行實驗。