QT QGraphicsView 在鼠标点击处进行放大缩小

一、前段时间在用QGraphicsView对图元进行放大缩小时,发现图形总是越来越跑偏,无法像地图中那样,点击哪里就能放大哪个地方。
如下所示:此时放大缩小的焦点并不在鼠标位置

方法,使用QGraphicsView类的设置属性函数.在构造函数中增加下面两个函数即可。

ui.View_ImageOpro->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
ui.View_ImageOpro->setResizeAnchor(QGraphicsView::AnchorUnderMouse);

此时以鼠标为中心的效果就出来了:

完整代码:

MyGraphicsView::MyGraphicsView()
{   
    //设置ui控件属性
    setDragMode(QGraphicsView::NoDrag);//(QGraphicsView::RubberBandDrag);//QGraphicsView::ScrollHandDrag
    scale_m = 1;//图形原始比例
    setStyleSheet("padding: 0px; border: 0px;");//无边框
    setMouseTracking(true);//跟踪鼠标位置
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//隐藏水平条
    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//隐藏竖条
    setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    setResizeAnchor(QGraphicsView::AnchorUnderMouse);
    
}
void MyGraphicsView::wheelEvent ( QWheelEvent * event )
{
    if (event->modifiers() == Qt::CTRL)
    {//按住ctrl键 可以放大缩小
        if((event->delta() > 0)&&(scale_m >= 50))//最大放大到原始图像的50倍
        {
            return;
        }
        else if((event->delta() < 0)&&(scale_m <= 0.01))//图像缩小到自适应大小之后就不继续缩小
        {
            return;//重置图片大小和位置,使之自适应控件窗口大小
        }
        else
        {
            // 当前放缩倍数;
            qreal scaleFactor = this->matrix().m11();
            scale_m = scaleFactor;
            
            int wheelDeltaValue = event->delta();
            // 向上滚动,放大;
            if (wheelDeltaValue > 0)
            {
                this->scale(1.2, 1.2);
            }
            else
            {// 向下滚动,缩小;
                this->scale(1.0 / 1.2, 1.0 / 1.2);
            }
            update();
        }
    }    
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 03:44:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 03:44:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 03:44:01       82 阅读
  4. Python语言-面向对象

    2024-03-26 03:44:01       91 阅读

热门阅读

  1. Spring事务核心:声明式事务&注解式事务

    2024-03-26 03:44:01       47 阅读
  2. c++翁恺

    c++翁恺

    2024-03-26 03:44:01      44 阅读
  3. 离婚时夫妻共有房屋的分割原则及方式

    2024-03-26 03:44:01       51 阅读
  4. 设计模式---单例模式

    2024-03-26 03:44:01       49 阅读
  5. 逻辑门与或非门的工艺结构原理及选型参数总结

    2024-03-26 03:44:01       51 阅读
  6. Python的条件语句与循环语句的语法

    2024-03-26 03:44:01       43 阅读
  7. C++ 中的 unordered_map 用法文档

    2024-03-26 03:44:01       47 阅读
  8. Elasticsearch(15) multi_match的使用

    2024-03-26 03:44:01       45 阅读
  9. 剑指offer面试题40 数组中只出现一次的数字

    2024-03-26 03:44:01       48 阅读
  10. anaconda配置虚拟python环境

    2024-03-26 03:44:01       44 阅读