2016-02-04 78 views
0

我建設Qt的creator.I一個非常簡單的圖像編輯器有我的圖像顯示在的QGraphicsView,我想給用戶通過按鈕來放大和縮小的能力。如何使用按鈕放大QgraphicsView?

我已經搜查了很多,發現如何通過鼠標進行放大和縮小wheel.As我是很新的Qt的,我不能把它調整到按鈕,因爲我不明白一切清楚。

我已經嘗試過(沒有完全理解我在做什麼),但結果不是想要的。它只放大一次,相當突然。我想要一個更平滑的縮放和多次我想要的。

void MainWindow::on_pushButton_clicked(){ 
    QMatrix matrix; 
    ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorViewCenter); 
    matrix.scale(1.0,1.0); 
    ui->graphicsView->setMatrix(matrix); 
    ui->graphicsView->scale(1,-1); 
} 

我會很感激,如果你們能幫助

回答

0

下面是我如何實現我的QGraphicsView的子縮放。請注意,您需要傳遞不同的「縮放」值以獲得不同的放大倍數,因爲縮放因子是絕對值,而不是相對值。

(可以將optMousePos參數設置爲指向QPoint,指出應該是縮放轉換的中心點的點,或者如果您不關心該點,則可以將其留空,因爲我使用它我放大和縮小根據用戶在他的鼠標轉動方向盤,和做時,用戶通常希望在放大對他的鼠標指向當前所處的點,而不是對圖形區域的中心)

qreal _zoom = 0.0; 

[...] 

void MyQGraphWidgetSubclass :: SetZoomFactor(qreal zoom, const QPoint * optMousePos) 
{ 
    if ((zoom != _zoom)&&(zoom >= 0.02f)&&(zoom <= 1000000.0f)) 
    { 
     QPointF oldPos; 
     if (optMousePos) oldPos = mapToScene(*optMousePos); 

     // Remember what point we were centered on before... 
     _zoom = zoom; 
     QMatrix m; 
     m.scale(_zoom, _zoom); 
     setMatrix(m); 

     if (optMousePos) 
     { 
      const QPointF newPos = mapFromScene(oldPos); 
      const QPointF move = newPos-*optMousePos; 
      horizontalScrollBar()->setValue(move.x() + horizontalScrollBar()->value()); 
      verticalScrollBar()->setValue(move.y() + verticalScrollBar()->value()); 
     } 
    } 
} 

void MyQGraphWidgetSubclass :: wheelEvent(QWheelEvent* event) 
{ 
    QPoint pos = event->pos(); 
    SetZoomFactor(_zoom*pow(1.2, event->delta()/240.0), &pos); 
    event->accept(); 
}