1. 程式人生 > 其它 >QT QGraphicsView 在滑鼠點選處進行放大縮小

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(); } } }