QT笔记- QGraphicsView视图- item拖动事件

说明

        在QGraphicsView视图下,对item的鼠标左键的拖动事件由函数mouseMoveEvent()接收。实现拖动功能需要设置item为"可选中"和"可拖动,该设置通过函数setFlags()实现。

函数

  1. virtual void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent * event)
  2. void QGraphicsItem::setFlags(GraphicsItemFlags flags)

释义

  1. 鼠标移动(拖动)事件。重新实现该函数即可接收到鼠标的item拖动事件。通过函数event->pos()获得鼠标在item中的当前坐标。
  2. 设置标记。枚举类型GraphicsItemFlags包含了一些可设置的item功能标记,这些功能可叠加设置。见下表
说明
QGraphicsItem::ItemIsSelectable可选中
QGraphicsItem::ItemIsMovable可移动
QGraphicsItem::ItemIsFocusable可获得焦点

示例

...

//设置item可选中且可移动
setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);

...

void mouseMoveEvent(QGraphicsSceneMouseEvent * event){
    cout << "mouseMoveEvent - "
         << (float)(event->pos().x()) << ","
         << (float)(event->pos().y()) << endl;
    QGraphicsItem::mouseMoveEvent(event);
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Qt中实现在QGraphicsView拖动QGraphicsItem,你可以按照以下步骤: 1. 创建一个QGraphicsScene实例,并将其设置为QGraphicsView的场景。 2. 在QGraphicsScene中创建一个QGraphicsItem。 3. 将QGraphicsItem添加到QGraphicsScene中。 4. 重写QGraphicsItem的mousePressEvent和mouseMoveEvent方法,以便在鼠标按下和移动时更新其位置。 5. 为QGraphicsView启用拖动功能,通过将setDragMode方法设置为ScrollHandDrag来实现。 下面是一个简单的示例代码: ```cpp #include <QtWidgets> class GraphicsItem : public QGraphicsRectItem { public: GraphicsItem(QGraphicsItem* parent = nullptr) : QGraphicsRectItem(parent) { setRect(0, 0, 50, 50); setFlag(QGraphicsItem::ItemIsMovable, true); } protected: void mousePressEvent(QGraphicsSceneMouseEvent* event) override { QGraphicsRectItem::mousePressEvent(event); setCursor(Qt::ClosedHandCursor); } void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override { QGraphicsRectItem::mouseMoveEvent(event); } void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override { QGraphicsRectItem::mouseReleaseEvent(event); setCursor(Qt::OpenHandCursor); } }; int main(int argc, char** argv) { QApplication app(argc, argv); QGraphicsScene scene; QGraphicsView view(&scene); view.setDragMode(QGraphicsView::ScrollHandDrag); GraphicsItem* item = new GraphicsItem; scene.addItem(item); view.setSceneRect(0, 0, 500, 500); view.show(); return app.exec(); } ``` 在这个例子中,我们创建了一个自定义的QGraphicsRectItem子类,重写了mousePressEvent、mouseMoveEvent和mouseReleaseEvent方法。当鼠标按下时,我们将鼠标光标设置为ClosedHandCursor,表示拖动状态开始。当鼠标移动时,QGraphicsRectItem的默认实现会更新其位置。当鼠标释放时,我们将鼠标光标设置为OpenHandCursor,表示拖动状态结束。 我们还创建了一个QGraphicsScene实例,并在其中添加了一个GraphicsItem实例。最后,我们将QGraphicsView的场景设置为QGraphicsScene,并启用了拖动功能。 这个例子只是一个简单的演示,你可以根据你的需求进行更改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值