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中使用?