Qt鼠标滚轮事件代码

本文档详细介绍了如何在Qt环境中处理鼠标滚轮事件,以实现图形视图的缩放功能。通过定义`InteractiveView`类继承自`QGraphicsView`,并重写`wheelEvent`方法,结合`setZoomDelta`和`zoom`等方法,实现在滚轮滚动时图像的放大和缩小。同时,还涉及到了其他如键盘事件和平移操作的处理。
摘要由CSDN通过智能技术生成

interactiveview.h

#ifndefINTERACTIVE_VIEW_H

#defineINTERACTIVE_VIEW_H

 

#include<QGraphicsView>

 

classQWheelEvent;

classQKeyEvent;

 

classInteractiveView:publicQGraphicsView

{

    Q_OBJECT

public:

     InteractiveView(QWidget*parent=0);

 

    //平移速度

    voidsetTranslateSpeed(qrealspeed);

    qrealtranslateSpeed()const;

 

    //缩放的增量

    voidsetZoomDelta(qrealdelta);

    qrealzoomDelta()const;

 

protected:

    //上/下/左/右键向各个方向移动、加/减键进行缩放、空格/回车键旋转

    voidkeyPressEvent(QKeyEvent*event)Q_DECL_OVERRIDE;

    //平移

    voidmouseMoveEvent(QMouseEvent*event)Q_DECL_OVERRIDE;

    voidmousePressEvent(QMouseEvent*event)Q_DECL_OVERRIDE;

    voidmouseReleaseEvent(QMouseEvent*event)Q_DECL_OVERRIDE;

    //放大/缩小

    voidwheelEvent(QWheelEvent*event)Q_DECL_OVERRIDE;

    voidmouseDoubleClickEvent(QMouseEvent*event)Q_DECL_OVERRIDE;

 

publicQ_SLOTS:

    voidzoomIn();  //放大

    voidzoomOut();  //缩小

    voidzoom(floatscaleFactor);//缩放-scaleFactor:缩放的比例因子

    voidtranslateF(QPointFdelta);  //平移

 

private:

    Qt::MouseButtonm_translateButton;  //平移按钮

    qrealm_translateSpeed;  //平移速度

    qrealm_zoomDelta;  //缩放的增量

    boolm_bMouseTranslate;  //平移标识

    QPointm_lastMousePos;  //鼠标最后按下的位置

    qrealm_scale;  //缩放值

};

 

#endif//INTERACTIVE_VIEW_H

interactiveview.cpp

#include"interactiveview.h"
#include<QWheelEvent>
#include<QKeyEvent>
#include<QScrollBar>
#include<QDebug>
 
#defineVIEW_CENTERviewport()->rect().center()
#defineVIEW_WIDTH  viewport()->rect().width()
#defineVIEW_HEIGHTviewport()->rect().height()
 
InteractiveView::InteractiveView(QWidget*parent)
    :QGraphicsView(parent),
      m_translateButton(Qt::LeftButton),
      m_scale(1.0),
      m_zoomDelta(0.1),
      m_translateSpeed(1.0),
      m_bMouseTranslate(false)
{
  
 
    //去掉滚动条
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
 
    setCursor(Qt::PointingHandCursor);
    setRenderHint(QPainter::Antialiasing);
 </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值