2012-06-23 93 views
4

我使用Qt,我想用鼠標移動一些物體。例如,用戶單擊對象並將該對象拖到窗口的另一個位置。我如何做到這一點?用鼠標移動物體

我試圖mouseMoveEvent:

void QDropLabel::mouseMoveEvent(QMouseEvent *ev) 
{ 
    this->move(ev->pos()); 
} 

可惜物體非常奇怪的方式。它從一個地方跳到另一個地方。

QDropLabel繼承QLabel。它也給出了一個像素圖。 我試圖用不同的對象來做,但結果是一樣的。

+1

鼠標移動事件不適用於「鼠標正在拖動某物」,而是文字鼠標(光標)移動。你必須以某種方式捕捉「拖動」。另外ev-> pos可能與widget相關 –

+0

我不想用它拖放。我只想用鼠標移動物體。 – LosYear

+1

好的,但你想要的物體本身跟隨光標,或使其可移動 –

回答

16

您的可移動小部件必須有一個QPoint offset成員。它將存儲相對於widget的左上角光標點擊的位置:

void DropLabel::mousePressEvent(QMouseEvent *event) 
{ 
    offset = event->pos(); 
} 

在鼠標移動事件中你只需動你的widget其父座標系。請注意,如果您不從光標位置減去offset,那麼您的小部件將'跳轉',因此其左上角將位於光標下方。

void DropLabel::mouseMoveEvent(QMouseEvent *event) 
{ 
    if(event->buttons() & Qt::LeftButton) 
    { 
     this->move(mapToParent(event->pos() - offset)); 
    } 
} 
+0

謝謝。是工作 – LosYear