2011-04-04 146 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); 
}