【问题标题】:Dragging object around a QWidget in Qt在 Qt 中围绕 QWidget 拖动对象
【发布时间】:2011-04-04 04:01:14
【问题描述】:

我正在尝试在 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,但这不起作用。

有人有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      在更改一个或多个成员变量的值后(在 mouseMoveEvent 或任何地方),调用 this->update()。这将告诉 Qt 它需要在不久的将来再次调用您的 paintEvent 方法。

      这应该就是你需要做的。

      【讨论】:

        【解决方案3】:

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

        根据您的问题,我看不出您没有做什么。 您确定绘制矩形时矩形处于新位置吗?

        也许您错过了 Jeremy Friesner 要求实施的更新步骤。

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

        【讨论】:

          猜你喜欢
          • 2013-08-20
          • 2021-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多