2011-04-04 152 views
3

我想在Qt Creator中製作一個支持拖動對象的自定義小部件。以最簡單的形式,小部件具有QRect(或任何其他形狀),我可以在其上單擊並將其拖動到小部件上。一旦我釋放鼠標按鈕,QRect應停止拖動。在Qt中圍繞QWidget拖動對象

在我的QWidget類的,我有這樣的方法

void ImageArea::mouseMoveEvent(QMouseEvent *event) 
{ 
    QPoint mousePos = event->pos(); 

    qDebug() << mousePos.x(); 
    qDebug() << mousePos.y(); 
    qDebug() << "---------"; 
} 

,可以讓鼠標作爲指針的座標在屏幕上移動。我嘗試更新x和y的成員變量,然後通過paintEvent方法繪製QRect,但這不起作用。

有沒有人有任何建議?

回答

0

執行paintEvent(QPaintEvent *)在相應成員變量的當前值所指示的位置繪製對象。

在更改了一個或多個成員變量的值(在mouseMoveEvent或其他地方)後,調用this-> update()。這將告訴Qt它需要在不久的將來再次調用paintEvent方法。

這應該是你需要做的。

0

請務必使用moveTo方法來移動矩形。 直接設置x,y位置可能會影響矩形的大小。

根據你的問題,我沒有看到你不在做什麼。 你確定矩形在繪製它們時處於新的位置嗎?

也許你錯過了Jeremy Friesner告訴我實施的更新步驟。

看來你錯過了鼠標按鈕跟蹤。 簡單的方法可能是從QApplication :: mouseButtons()獲取鼠標按鈕狀態。儘管它可能效率稍低。

2

爲了讓鼠標移動事件,您必須將QWidget::mouseTracking屬性設置爲true:

ImageArea::ImageArea(QWidget* p) : QWidget(parent) { 
    ... 
    setMouseTracking(true); 
}