2016-03-08 47 views
0

我有一個應用程序,可以在Qt Creator中使用鼠標滾輪來處理縮放。在Qt中按下鼠標滾輪時的平移C++

CPP

void QNodeView::wheelEvent(QWheelEvent* event) { 

    setTransformationAnchor(QGraphicsView::AnchorUnderMouse); 

    // Scale the view/do the zoom 
    double scaleFactor = 1.15; 
    if(event->delta() > 0) { 
     // Zoom in 
     scale(scaleFactor, scaleFactor); 
    } else { 
     // Zooming out 
     scale(1.0/scaleFactor, 1.0/scaleFactor); 
    } 
} 

這是

protected: 
    //Take over the interaction 
    virtual void wheelEvent(QWheelEvent* event); 

如何添加鼠標中鍵可進行平移的能力,與被按下的用戶拖動頭文件 ^h光標?

如果需要的話,我可以發佈項目代碼。 感謝

項目文件的鏈接(Qt Creator的項目)

https://www.dropbox.com/s/gbt4qqtdedltxek/QNodesEditor-master_01.zip?dl=0

+1

覆蓋mousePressEvent(),mouseMoveEvent(),和mouseReleaseEvent(),和內部的每個那些試驗的事件 - >按鈕()== Qt的:: MiddleButton –

回答

0

起初,引入一些新的成員變量到您的瀏覽器類:

class QNodeView : public QGraphicsView 
{ 
    // ... 

private: 
    int m_originalX = 0; 
    int m_originalY = 0; 
    bool m_moving = false; 
}; 

然後重新實現mousePressEvent()mouseMoveEvent()mouseReleaseEvent()

void QNodeView::mousePressEvent(QMouseEvent* event) 
{ 
    if (event->button() == Qt::MiddleButton) 
    { 
     // store original position 
     m_originalX = event->x(); 
     m_originalY = event->y(); 

     // set the "moving" state 
     m_moving = true; 
    } 
} 

void QNodeView::mouseMoveEvent(QMouseEvent* event) 
{ 
    if (m_moving) 
    { 
     // panning operates in the scene coordinates using x,y 
     QPointF oldp = mapToScene(m_originalX, m_originalY); 
     QPointF newp = mapToScene(event->pos()); 
     QPointF translation = newp - oldp; 

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

     m_originalX = event->x(); 
     m_originalY = event->y(); 
    } 
} 

void QNodeView::mouseReleaseEvent(QMouseEvent* event) 
{ 
    if (event->button() == Qt::MiddleButton) 
    { 
     m_moving = false; 
    } 
} 
+0

我試圖我的樣品中,它沒有似乎移動了這個觀點呢?我應該發佈代碼 – JokerMartini

+0

是的,發佈代碼請 – Tomas

+0

我已經添加到OP中的收件箱文件的鏈接,我真的很感謝你對此的幫助。該項目來自公共github存儲庫。 – JokerMartini