說明:使用該類,可實現任意qwidget子類控制項如下圖移動。
效果:
**件:
#ifndef movewidget_h
#define movewidget_h
#include
class
movewidget
:public qobject
;#endif
// movewidget_h
cpp檔案:
#include
"movewidget.h"
#include
"qevent.h"
#include
"qdebug.h"
movewidget::
movewidget
(qobject *parent)
:qobject
(parent)
,lastpoint
(qpoint(0
,0))
,pressed
(false),
leftbutton
(true),
incontrol
(true),
widget
(false
)bool movewidget::
eventfilter
(qobject *watched, qevent *event)
}else
if(mouseevent-
>
type()
== qevent::mousemove && pressed)
widget-
>
move
(x, y);}
else
if(mouseevent-
>
type()
== qevent::mousebuttonrelease && pressed)
pressed =
false;}
return qobject::
eventfilter
(watched, event);}
void movewidget::
setwidget
(qwidget *widget)
}void movewidget::
setleftbutton
(bool leftbutton)
void movewidget::
setincontrol
(bool incontrol)
使用方法:設定ui->pushbutton
、ui->pushbutton_2
按鈕可移動,引數可以是任意qwidget
子類。
movewidget *move =
newmovewidget
(this);
move-
>
setwidget
(ui-
>pushbutton)
; movewidget *move2 =
newmovewidget
(this);
move2-
>
setwidget
(ui-
>pushbutton_2)
;
實現控制項拖動
網上流傳的一種寫法是 利用 releasecapture sendmessage wm nclbuttondown,htcaption,0 但這種方法有很大的侷限。這裡提供的方法,更加直接。以按鈕為例,讓按鈕來捕獲 滑鼠按下和鬆開的訊息。然後關鍵就在於滑鼠移動的訊息的處理,如果讓按鈕自身來處理wm ...
建立可拖動控制項
using system using system.windows.forms using system.drawing namespace controlcollect.web.controls endregion region 建構函式 構造控制項拖動物件 需要拖動的控制項 public con...
WPF實現控制項拖動
實現控制項拖動的基本原理是對滑鼠位置的捕獲,同時根據滑鼠按鍵的按下 釋放確定控制項移動的幅度和時機。簡單示例 在grid中有乙個button,通過滑鼠事件改編button的margin屬性,從而改變button在grid中的相對位置。gd 90 height 30 name btn button 為...