2014-02-27 88 views
0

如何管理聯合鼠標移動(例如左擊+ midle點擊+左鍵點擊釋放)Qt的鼠標移動/動作組合

我有方法mousePressEventmouseReleaseEvent但我沒有發現他們的組合方式。

+0

你的問題不是很清楚,你是什麼試圖做什麼? –

+0

我有一個顯示內容的QWidget,這個顯示可以被操縱(移動,平移,縮放),我嘗試只使用鼠標。這會產生5個動作(移動,平移,縮放,選擇和右鍵單擊)以及鼠標上的3個按鈕。這就是爲什麼我試圖結合每個動作的鼠標移動:L + M - L =移動,僅Midle =泛,L + M =縮放,左=選擇,右=屬性。 – nathanael

+0

您可以將mousePressEvent中的最後一個事件存儲爲一個類變量,然後從那裏構建它們,但是我真的建議您爲它查找不同的解決方案。 –

回答

0

如果您需要結合mousePressmouseRelease的信息,您需要以某種方式跟蹤哪個按鈕仍然處於按下狀態,哪個按鈕已被再次釋放。

下面是一個簡單的比較例子似乎做你的描述(通過打印輸出指示的操作)

讓我知道,如果這有助於

#include <QGraphicsScene> 
#include <QGraphicsView> 
#include <QMouseEvent> 
#include <QtCore> 


class MyGraphicsView: public QGraphicsView 
{ 
public: 
    MyGraphicsView(QGraphicsScene *scene, QWidget *parent = 0) : QGraphicsView(scene,parent) 
    { 
    active[Qt::LeftButton] = false; 
    active[Qt::RightButton] = false; 
    active[Qt::MiddleButton] = false; 
    } 

public slots: 
    virtual void mousePressEvent(QMouseEvent * event); 
    virtual void mouseReleaseEvent(QMouseEvent * event); 

    std::map< Qt::MouseButton, bool > active; 

}; 

void MyGraphicsView::mousePressEvent(QMouseEvent * event) 
{ 
    active[event->button()] = true; 

    if(event->button() == Qt::LeftButton && !active[Qt::MiddleButton] && !active[Qt::RightButton]) { 
    qDebug() << "select"; 
    } else if (event->button() == Qt::RightButton && !active[Qt::LeftButton] && !active[Qt::MiddleButton]) { 
    qDebug() << "property"; 
    } else if (event->button() == Qt::LeftButton && active[Qt::MiddleButton] && !active[Qt::RightButton]) { 
    qDebug() << "zoom"; 
    } else if (event->button() == Qt::MiddleButton && !active[Qt::LeftButton] && !active[Qt::RightButton]) { 
    qDebug() << "pan"; 
    } 

} 

void MyGraphicsView::mouseReleaseEvent(QMouseEvent * event) 
{ 
    if(event->button() == Qt::LeftButton && active[Qt::LeftButton] && active[Qt::MiddleButton]){ 
    qDebug() << "move"; 
    } 
    active[event->button()] = false; 
} 



int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    QGraphicsScene scene; 
    scene.setSceneRect(-100.0, -100.0, 200.0, 200.0); 

    MyGraphicsView view(&scene); 
    view.show(); 

    return app.exec(); 
}