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


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

    最初的效果

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

    1 setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    2 setResizeAnchor(QGraphicsView::AnchorUnderMouse);

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

    完整代码:

     1 MyGraphicsView::MyGraphicsView()
     2 {
     3     setDragMode(QGraphicsView::NoDrag);//(QGraphicsView::RubberBandDrag);//QGraphicsView::ScrollHandDrag
     4     scale_m = 1;//图形原始比例
     5     setStyleSheet("padding: 0px; border: 0px;");//无边框
     6     setMouseTracking(true);//跟踪鼠标位置
     7     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//隐藏水平条
     8     setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//隐藏竖条
     9     setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
    10     setResizeAnchor(QGraphicsView::AnchorUnderMouse);
    11     
    12 }
    13 void MyGraphicsView::wheelEvent ( QWheelEvent * event )
    14 {
    15     if (event->modifiers() == Qt::CTRL)
    16     {//按住ctrl键 可以放大缩小
    17         if((event->delta() > 0)&&(scale_m >= 50))//最大放大到原始图像的50倍
    18         {
    19             return;
    20         }
    21         else if((event->delta() < 0)&&(scale_m <= 0.01))//图像缩小到自适应大小之后就不继续缩小
    22         {
    23             return;//重置图片大小和位置,使之自适应控件窗口大小
    24         }
    25         else
    26         {
    27             // 当前放缩倍数;
    28             qreal scaleFactor = this->matrix().m11();
    29             scale_m = scaleFactor;
    30             
    31             int wheelDeltaValue = event->delta();
    32             // 向上滚动,放大;
    33             if (wheelDeltaValue > 0)
    34             {
    35                 this->scale(1.2, 1.2);
    36             }
    37             else
    38             {// 向下滚动,缩小;
    39                 this->scale(1.0 / 1.2, 1.0 / 1.2);
    40             }
    41             update();
    42         }
    43     }    
    44 }
  • 相关阅读:
    11. 盛最多水的容器
    820. 单词的压缩编码
    72. 编辑距离
    10041-回文数
    第六章-希尔排序和堆排序
    第六章-快速排序、合并排序
    第六章 排序-冒泡,选择,插入排序
    第四章-二叉树的运用-AVL平衡二叉树
    第四章-二叉树的运用-排序二叉树的代码
    第四章-二叉树的代码 、二叉树前序中序后序遍历、及运用
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13745284.html
Copyright © 2020-2023  润新知