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(); } } }
分类:
QT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!