如何管理组合式鼠标移动(例如,左击+中间单击+左键释放)
我有mousePressEvent和mouseReleaseEvent方法,但我没有找到将它们组合起来的方法。
发布于 2015-04-21 17:56:48
如果您需要组合来自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();
}https://stackoverflow.com/questions/22067664
复制相似问题