Qt自定义类之自由移动的mainwindow
先要清楚,只是拖動mainwindow你是拖不動那個界面的,但是又想要設計漂亮的無標題欄的控件時,那就需要加自己的重寫函數了
一開始我被這個東西給嚇到了,因為在網上看了很多人的文章,但是發現我找不到他們是怎么讓這個類知道event的,因為大家都是只寫了幾個類函數,但是就這么結束了???exm???
壯膽在QT上寫下了那個函數名。結果發現那玩意是可以突然變成了斜體!!!
就像這樣
這時我就意識到了,這玩意會不會是在基類上定義了模板函數的…我們就直接覆蓋掉了原來的那個函數,其實內部實現的時候,會檢測到東西的。只不過以前的版本(基類)中,這個函數很可能是個虛函數還是什么的,所以….(好吧,其實還有可能在于使用了event作為參數)
帶著這份猜測,我寫看懂了網上的很多代碼之后,寫下下面這段代碼
mMoving : bool值,判斷鼠標是否移動
mLastMousePosition: QPoint類型,記錄以前的位置
思路其實很簡單:
1. 當按下鼠標左鍵的時候,將鼠標移動給激活起來。同時記錄當前位置的坐標
2. 要表現那種拖動,我們就要記錄鼠標是否還在被拖動中。那只要mMoving是True我們就知道鼠標還在拖動中。否則我們肯定是會檢測到鼠標松動(release)那么mMoving就被設置為了False。那也就不是移動的狀態了。
3. 其實學好了這個還可以改寫其他的類,這樣就可以使得所有的類都可以被設置為可以拖動的狀態了(當然啦,是可拖動,就拖動整個框)
總結
以上是生活随笔為你收集整理的Qt自定义类之自由移动的mainwindow的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DF以某一列的元素筛选其中属于某个集合的
- 下一篇: python得到一个excel的全部sh