2016-03-08 87 views
1

我創建了我自己的類(視圖和場景)來顯示我添加到它的圖像和對象,甚至實現了放大/縮小功能,以實現我的視圖,但現在我必須添加新的功能,我甚至不知道如何開始尋找它。QT圖形場景/視圖 - 用鼠標移動

  • 每當我按下鼠標的滾動按鈕並保持它 - 我想現場周圍移動,看到它的不同部分 - 就像我會與滑塊。它應該與任何其他程序類似,允許放大/縮小圖像並移動縮放的圖片以查看其中的不同部分。

不幸的是 - 我甚至不知道如何尋找一些基本的東西,因爲「移動」和類似的東西指的是拖動周圍的物體。

編輯1

void CustomGraphicView::mouseMoveEvent(QMouseEvent *event) 
{ 
    if(event->buttons() == Qt::MidButton) 
    { 
     setTransformationAnchor(QGraphicsView::AnchorUnderMouse); 
     translate(event->x(),event->y()); 
    } 
} 

嘗試這樣 - 但它工作在反向。

+0

請在此處添加有意義的代碼和問題說明。發佈 [最小,完整和可驗證示例(MCVE)](http://stackoverflow.com/help/mcve) 顯示您的問題將幫助您獲得更好的答案。欲瞭解更多信息,請參閱 [我網站上的某些內容不起作用。我可以只粘貼一個鏈接嗎?](http://meta.stackexchange.com/questions/125997/) 謝謝! – Raju

+0

我的問題是,我不知道如何打電話。 – Arker

+0

這是回答這裏:http://stackoverflow.com/questions/4753681/how-to-pan-images-in-qgraphicsview – vcp

回答

2

我想你知道如何處理使用Qt的事件。

因此,翻譯(移動)您的視圖使用QGraphicsView::translate()方法。

編輯

如何使用它:

void CustomGraphicsView::mousePressEvent(QMouseEvent* event) 
{ 
    if (e->button() == Qt::MiddleButton) 
    { 
     // Store original position. 
     m_originX = event->x(); 
     m_originY = event->y(); 
    } 
} 

void CustomGraphicsView::mouseMoveEvent(QMouseEvent* event) 
{ 
    if (e->buttons() & Qt::MidButton) 
    { 
     QPointF oldp = mapToScene(m_originX, m_originY); 
     QPointF newP = mapToScene(event->pos()); 
     QPointF translation = newp - oldp; 

     translate(translation.x(), translation.y()); 

     m_originX = event->x(); 
     m_originY = event->y(); 
    } 
} 
+0

是的,我知道。所以我必須在我的GraphicView中使用mouseEven並調用該函數,是的? – Arker

+0

是的,就是這樣。 – Tomas

+0

我做了我的嘗試 - >編輯1 – Arker