首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt运动/动作组合

Qt运动/动作组合
EN

Stack Overflow用户
提问于 2014-02-27 11:50:13
回答 1查看 164关注 0票数 0

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-21 17:56:48

如果您需要组合来自mousePressmouseRelease的信息,您需要以某种方式跟踪哪个按钮仍然按下,哪个按钮已经再次发布。

下面是一个很简单的例子,它看起来像你所描述的那样(打印出的动作)

如果这对我有帮助,请告诉我

代码语言:javascript
复制
#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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22067664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档