qt语言,以鼠标为中心点进行放大和缩小。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt语言,以鼠标为中心点进行放大和缩小。相关的知识,希望对你有一定的参考价值。
我用QGraphicsView 和QGraphicsScene ,做一个类似地图的小软件。
现在已经实现了,依靠滚轮来放大缩小。只不过默认的是以Scene的中心点放大缩小。
我想以鼠标为中心点来进行放大和缩小。
就像百度地图里的那样,鼠标放到一个item上后,滚动滚轮,整个地图会放大,但是item还是鼠标所在位置。
我应该怎样做?谢谢
不用详细说,如果有懂的大神,麻烦提示一下。
如果是,那么每次出发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语言,以鼠标为中心点进行放大和缩小。的主要内容,如果未能解决你的问题,请参考以下文章
Qt for python QChartView鼠标滚动放大缩小
Qt for python QChartView鼠标滚动放大缩小