QWidget控制項拖動設計類

2021-10-21 02:40:35 字數 1794 閱讀 7944

說明:使用該類,可實現任意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->pushbuttonui->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 為...