qt语言,以鼠标为中心点进行放大和缩小。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt语言,以鼠标为中心点进行放大和缩小。相关的知识,希望对你有一定的参考价值。

我用QGraphicsView 和QGraphicsScene ,做一个类似地图的小软件。

现在已经实现了,依靠滚轮来放大缩小。只不过默认的是以Scene的中心点放大缩小。

我想以鼠标为中心点来进行放大和缩小。
就像百度地图里的那样,鼠标放到一个item上后,滚动滚轮,整个地图会放大,但是item还是鼠标所在位置。
我应该怎样做?谢谢
不用详细说,如果有懂的大神,麻烦提示一下。

参考技术A 理论来说,你应该是重写了wheelEvent这个方法吧?
如果是,那么每次出发wheelEvent事件的时候会带有QWheelEvent事件参数。
事件参数有鼠标出发滚轮事件的位置,即x,y。你可以调用相应的getter来获取值。
当你有了对于View的x和y的时候想干啥都可以了。

有问题HI吧~追问

我重写了wheelEvent这个方法

我能得到view的 x,和y 但是我不知道怎么弄啊,请指点

追答

你到底是哪里不知道怎么弄?
你是根据x,y不知道放大缩小还是什么?
能否描述的清楚一点。

追问

我想和你qq,三 七 五 一 七 四 二 八 八

本回答被提问者采纳
参考技术B 没有实验过虽然我也玩QT追问

qq:375

参考技术C graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
graphicsView->setResizeAnchor(QGraphicsView::AnchorUnderMouse);

OpenFramework中视频或者图片进行中心旋转平移放大缩小矫正(本例以视频为准,只给出主要代码)

/********** update mesh部分***********/

for(int i=0;i<4;i++)

 {  

   mesh[i].clear(); //重要,不加的话,移动视频的四个角出现视频的重叠  

   mesh[i].addVertex(ofPoint(point[i][0]->x,point[i][0]->y));

    mesh[i].addVertex(ofPoint(point[i][1]->x,point[i][1]->y));

    mesh[i].addVertex(ofPoint(point[i][2]->x,point[i][2]->y));

    mesh[i].addTexCoord(ofPoint(0,0));

    mesh[i].addTexCoord(ofPoint(LRatio,0));

    mesh[i].addTexCoord(ofPoint(0,WRatio));

    mesh[i].addVertex(ofPoint(point[i][1]->x,point[i][1]->y));

    mesh[i].addVertex(ofPoint(point[i][2]->x,point[i][2]->y));

    mesh[i].addVertex(ofPoint(point[i][3]->x,point[i][3]->y));

    mesh[i].addTexCoord(ofPoint(LRatio,0));

    mesh[i].addTexCoord(ofPoint(0,WRatio));

    mesh[i].addTexCoord(ofPoint(LRatio,WRatio));

 }

 

/********** draw()部分***********/

ofBackground(ofColor::black); //背景设成黑色,需要投影播放

 ofSetColor(ofColor::white);

 fbo.begin();//////////整体渲染的开始 

 ofPushMatrix();

 ofClear(255); //重要,消除移动时留下重影  

 ofTranslate(ofGetWindowWidth()*0.5,ofGetWindowHeight()*0.5);  

 ofRotate(holisticRotate); //整体的旋转  

 ofScale(holisticScale->x,holisticScale->y); //整体的放大缩小

 ofTranslate(holisticPos->x,holisticPos->y); //整体的上下左右移动

  for (int i=0;i<4;i++) //分别对四个视频进行相关的操作  

 {       

   ofPushMatrix();  

         ofTranslate(m_video[i].width/2,m_video[i].height/2);   

         ofRotate(rotatePos[i]);    //360度旋转  

     ofScale(scalePos[i]->x,scalePos[i]->y); //上下左右反转      

     ofTranslate(m_videoPos[i]->x,m_videoPos[i]->y); 

      m_video[i].bind(); //绑定视频   

     mesh[i].draw();   

     m_video[i].unbind(); //解除绑定  

     //mesh[i].drawWireframe(); //画边线,不去除在视频中会出现对角线   

    ofPopMatrix();  

 }

   ofPopMatrix();

   fbo.end();//////////整体渲染的结束

   fbo.getTexture().bind();

   _mesh.draw();

   fbo.getTexture().unbind();

   _mesh.clear(); //重要,消除整体移动时的重影

以上是关于qt语言,以鼠标为中心点进行放大和缩小。的主要内容,如果未能解决你的问题,请参考以下文章

在WPF里面实现以鼠标位置为中心缩放移动图片

Qt for python QChartView鼠标滚动放大缩小

Qt for python QChartView鼠标滚动放大缩小

使用带有变换原点中心的滚轮在鼠标点上放大/缩小图像。在计算中需要帮助 [已解决]

鼠标缩放实现,以鼠标位置为中心 [算法]

winform 如何实现鼠标位置获取picturebox的焦点,然后焦点放大