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

一、前段时间在用QGraphicsView对图元进行放大缩小时,发现图形总是越来越跑偏,无法像地图中那样,点击哪里就能放大哪个地方。

如下所示:此时放大缩小的焦点并不在鼠标位置

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

cpp 复制代码
ui.View_ImageOpro->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
ui.View_ImageOpro->setResizeAnchor(QGraphicsView::AnchorUnderMouse);

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

完整代码:

cpp 复制代码
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();
        }
    }    
}
相关推荐
死磕音视频8 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
顽疲10 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
用户83344239661410 小时前
从批量操作到任务中心,再到现场工作台:DeviceForge v2.10—v2.12 完整演进
qt
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
宛 禾12 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
程序喵大人12 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)12 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
学逆向的13 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
霸道流氓气质13 小时前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
释厄62314 小时前
错误无误公理——错误正确本同源都迭代定律——逆转有价值
android·开发语言·kotlin