在Qt中的QWidget周围拖动对象

时间:2011-04-04 04:01:15

标签: c++ qt mouseevent qt-creator qpainter

我正在尝试在Qt Creator中创建一个支持拖动对象的自定义小部件。在最简单的形式,小部件有一个QRect(或任何其他形状),我可以在其上单击,然后将其拖动到小部件周围。释放鼠标按钮后,QRect应该停止拖动。

在我的QWidget类中,我有这个方法

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

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

当指针在屏幕上移动时,可以获取鼠标的坐标。我尝试更新x和y的成员变量,然后通过paintEvent方法绘制QRect,但这不起作用。

有人有任何建议吗?

3 个答案:

答案 0 :(得分:2)

要获取鼠标移动事件,必须将QWidget::mouseTracking属性设置为true:

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

答案 1 :(得分:0)

实现paintEvent(QPaintEvent *)以在对应成员变量的当前值指示的位置绘制对象。

在更改了一个或多个成员变量的值(在mouseMoveEvent或其中)之后,请调用this-&gt; update()。这将告诉Qt它需要在不久的将来再次调用您的paintEvent方法。

这应该是你需要做的全部。

答案 2 :(得分:0)

请务必使用 moveTo 方法移动矩形。 直接设置x,y位置可能会影响矩形的大小。

根据你的问题,我根本不知道你做了什么。 你确定在绘制它们时矩形是否处于新位置?

也许你错过了Jeremy Friesner告诉实施的更新步骤。

您似乎缺少鼠标按钮跟踪。 简单的方法可能是从QApplication :: mouseButtons()获取鼠标按钮状态。虽然效率可能略低。