elden lord 2023-02-10 06:37 采纳率: 100%
浏览 47
已结题

QGriphicsView中scene按照鼠标中心和鼠标滚轮操作缩放

Qt 和 c++环境下QGriphicsView怎么屏蔽其本身的滚动条对鼠标滚轮的响应

重写了鼠标滚轮响应事件为缩放View中的GraphicsScene视图,但是view中滚动栏也会响应鼠标滚轮事件导致效果不好,过滤器相关的内容也只找到屏蔽鼠标滚轮,期望效果是让view中scene按照鼠标中心缩放,怎么才能实现这种效果?

  • 写回答

3条回答 默认 最新

  • R.Ls 2023-02-10 06:44
    关注

    你可以通过以下方法实现这种效果:

    在QGraphicsView类中重写viewportEvent()函数,并在该函数中过滤掉鼠标滚轮事件。

    在QGraphicsView类中重写wheelEvent()函数,实现自己的缩放操作。

    例如:

    class MyGraphicsView : public QGraphicsView
    {
        Q_OBJECT
    
    public:
        MyGraphicsView(QWidget *parent = 0) : QGraphicsView(parent) {}
    
    protected:
        bool viewportEvent(QEvent *event)
        {
            if (event->type() == QEvent::Wheel)
                return true;
            return QGraphicsView::viewportEvent(event);
        }
    
        void wheelEvent(QWheelEvent *event)
        {
            qreal scaleFactor = 1.15;
            if (event->delta() > 0)
            {
                scale(scaleFactor, scaleFactor);
            }
            else
            {
                scale(1.0 / scaleFactor, 1.0 / scaleFactor);
            }
            event->accept();
        }
    };
    
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    elden lord 2023-02-10 08:11

    但是我不是想完全屏蔽鼠标滚轮,只是想屏蔽view的滚动栏去接收这个信号,用滚轮来缩放

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月23日
  • 创建了问题 2月10日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部