Qt鼠标移动/动作组合

Qt鼠标移动/动作组合,qt,Qt,如何管理组合鼠标移动,例如左键单击+中键单击+左键单击释放 我有mousePressEvent和mouseReleaseEvent方法,但我没有找到将它们组合起来的方法。如果需要组合mousePress和mouseRelease中的信息,您需要以某种方式跟踪哪个按钮仍然按下,哪个按钮已经再次释放 下面是一个相当简单的示例,它似乎实现了您描述的打印输出所指示的操作 如果有帮助,请告诉我 #include <QGraphicsScene> #include <QGraphicsVi

如何管理组合鼠标移动,例如左键单击+中键单击+左键单击释放


我有mousePressEvent和mouseReleaseEvent方法,但我没有找到将它们组合起来的方法。

如果需要组合mousePress和mouseRelease中的信息,您需要以某种方式跟踪哪个按钮仍然按下,哪个按钮已经再次释放

下面是一个相当简单的示例,它似乎实现了您描述的打印输出所指示的操作

如果有帮助,请告诉我

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

你的问题不是很清楚,你想做什么?我有一个QWidget可以显示一些东西,这个显示可以被操纵移动,平移,缩放,我试着只用鼠标。这会使5个动作移动、平移、缩放、选择和右键单击,而鼠标上只有3个按钮。这就是为什么我尝试为每个动作组合鼠标移动:L+M-L=move,仅Midle=pan,L+M=zoom,Left=select,Right=property。您可以将mousePressEvent中的最后一个事件存储为类变量,然后从中构建它们,但是我真的建议你为它寻找一个不同的解决方案。也许你可以在你的mouseMoveEvent中使用?