Qt как проверить, какая кнопка мыши нажата

У меня проблемы в PySide при попытке определить, какая кнопка мыши нажата в функции события. Он мне нужен, в частности, для игнорирования события перемещения мыши, потому что он выполняет работу с обеими кнопками мыши — левой и правой.

Я хочу игнорировать событие перемещения мыши, если нажата правая кнопка на сцене. Любая помощь?

7

Решение

Все события мыши имеют два метода (button а также buttons) определить, какая из кнопок нажата. Но только для move событие документация говорит:

Обратите внимание, что возвращаемое значение всегда Qt :: NoButton для событий перемещения мыши.

за mouseMoveEvent ты должен использовать buttons метод.

void mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() == Qt::RightButton)
qDebug() << "Only right button";
}

Чтобы игнорировать события перемещения, вам нужно выполнить эту работу в eventFilter конечно.

15

Другие решения

QApplication::mouseButtons() вернет статус mouseButton,
Таким образом, вы можете получить статус мыши в KeyPressEvent,

8

Вы можете использовать логическое значение:

void mousePressEvent(QMouseEvent *event)
{
if (event->button()==Qt::RightButton){
qDebug() << "right button is pressed
pressed=true; //<-----
}
}

и на mouseMoveEvent

void GLWidget::mouseMoveEvent(QMouseEvent *event)
{

float dx = event->x() - lastPos.x();      // where lastpos is a QPoint member
float dy = event->y() - lastPos.y();

if (dx<0) dx=-dx;
if (dy<0) dy=-dy;

if (event->buttons() & Qt::LeftButton) {  //if you have MOVEd

...do something

}

if (event->buttons() & Qt::RightButton) {

if (pressed==true) return;
else{
...do
}
}
}

При отпускании мыши вы должны установить нажатие = ложь; («нажат» должен быть членом класса)

Надеюсь, это поможет, дайте мне знать

2

Вы можете проверить, какая кнопка мыши нажата с помощью Qt::RightButton, Извините за код C ++, но я надеюсь, вы все равно поймете идею:

void mousePressEvent(QMouseEvent *event)
{
if (event->button()==Qt::RightButton){
qDebug() << "right button is pressed
}
}
1
По вопросам рекламы [email protected]