一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

一、前段时间在用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 }
复制代码

 

posted on   一杯清酒邀明月  阅读(3750)  评论(1编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示