QT开发中文网

qt QGraphicsView 鼠标点击拖动画图

在Qt的QGraphicsView中,可以通过重写鼠标事件来实现拖动画图的功能。具体步骤如下:

  1. 重写QGraphicsView的mousePressEvent()函数,记录下鼠标按下时的坐标。

  2. 重写QGraphicsView的mouseMoveEvent()函数,在该函数中计算出当前鼠标位置相对于上一次记录的位置的偏移量,并将该偏移量应用到场景中所有可选中项(即被设置了ItemIsSelectable属性)的位置上。

  3. 在mouseReleaseEvent()函数中清除之前保存的坐标信息。

下面是一个示例代码,演示了如何实现拖动画图的功能:

void MyView::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        lastPos = event->pos();
    }
}

void MyView::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton) {
        QPointF delta = mapToScene(event->pos()) - mapToScene(lastPos);

        // 将偏移量应用到场景中所有可选中项的位置上
        QList<QGraphicsItem *> items = scene()->selectedItems();
        for (int i = 0; i < items.size(); ++i) {
            QGraphicsItem *item = items.at(i);
            item->moveBy(delta.x(), delta.y());
        }

        lastPos = event->pos();
    }
}

void MyView::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        lastPos = QPoint();
    }
}

在这个示例中,我们使用了一个lastPos变量来记录上一次鼠标位置。在mousePressEvent()中,我们将其设置为当前鼠标位置;在mouseMoveEvent()中,我们计算出当前鼠标位置相对于上一次记录的位置的偏移量,并将其应用到场景中所有可选中项(即被设置了ItemIsSelectable属性)的位置上;在mouseReleaseEvent()中,我们清除之前保存的坐标信息。

这样就可以实现简单的拖动画图功能了。需要注意的是,如果您希望只有某些项可以被拖动,则需要设置它们的ItemIsMovable属性为true,并且确保它们没有被设置为不可选中(即未被设置ItemIsSelectable属性)。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=2026

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?