Qt 鼠标移动实现绘图

e->button();返回的是触发事件的按键

e->buttons();返回的是事件发生后按键的状态

所以在使用鼠标绘图的时候,要用以下代码实现绘图

void Dialog::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        lastPoint = event->pos();
    }
    endPoint = lastPoint;
}

void Dialog::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)  // 特别注意这里必须是buttons
    {
        endPoint = event->pos();
        update();

    }
}

 

Qt中,QGraphicsView是用来显示和处理大型场景的视图类。要实现鼠标绘图,可以通过以下步骤进行: 1. 创建QGraphicsView实例和一个场景(QGraphicsScene)对象,并将场景设置给视图。 2. 创建一个继承自QGraphicsItem的自定义图形项类,用于表示绘图的形状。 3. 在自定义图形项类中,重写mousePressEvent和mouseMoveEvent两个事件处理函数,用于捕捉鼠标按下和移动事件。 4. 在mousePressEvent中,记录鼠标按下的位置,并创建一个新的图形项对象。 5. 在mouseMoveEvent中,根据鼠标移动的位置,更新图形项对象的形状。 6. 将新创建的图形项对象添加到场景中,并使用QGraphicsScene::addItem()函数进行添加。 7. 最后,将场景设置给QGraphicsView,并调用QGraphicsView::show()函数显示视图。 以下是一个简单示例代码: ```cpp #include <QtWidgets> class CustomGraphicsItem : public QGraphicsItem { public: CustomGraphicsItem() : QGraphicsItem() { setFlag(ItemIsMovable); setAcceptHoverEvents(true); } QRectF boundingRect() const override { return QRectF(0, 0, 100, 100); } void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override { painter->drawEllipse(boundingRect()); } void mousePressEvent(QGraphicsSceneMouseEvent* event) override { if (event->button() == Qt::LeftButton) { QPointF position = event->pos(); qDebug() << "Mouse press at:" << position; } } void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override { setPos(event->pos()); } }; int main(int argc, char* argv[]) { QApplication app(argc, argv); QGraphicsScene scene; QGraphicsView view(&scene); CustomGraphicsItem* item = new CustomGraphicsItem(); scene.addItem(item); view.show(); return app.exec(); } ``` 这是一个简单的绘图程序,可以在视图中点击鼠标左键,然后拖动鼠标绘制一个圆形图形项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值