Как получить отпущенную кнопку внутри MouseReleaseEvent в Qt

В MouseReleaseEvent(QMouseEvent *e)Есть ли способ узнать, какая кнопка была выпущена без использования новой переменной? Я имею в виду что-то вроде в MousePressEvent(QMouseEvent *e) с e.buttons(),
Я старался e.buttons() в releaseEvent он не работает (что логично).

5

Решение

e это уже переменная. Просто используйте:

void mouseReleaseEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton)    // Left button...
{
// Do something related to the left button
}
else if (e->button() == Qt::RightButton)   // Right button...
{
// Do something related to the right button
}
else if (e->button() == Qt::MidButton)   // Middle button...
{
// Do something related to the middle button
}
}

switch Заявление тоже работает. Я предпочитаю серию if -- else if потому что они облегчают обработку четных модификаторов, т.е. e->modifiers() для того, чтобы проверить альтернативные или контрольные клики. Серия if достаточно короткая, чтобы не создавать нагрузки для программы.

РЕДАКТИРОВАТЬ: Обратите внимание, что вы должны использовать button() функция, а не его множественное число buttons() версия. См. Объяснение в ответе @ Merlin069.

9

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

Проблема в размещенном коде заключается в следующем:

if(e->buttons() & Qt::LeftButton)

Как Документация Qt состояния для события выпуска: —

… Для событий отпускания мыши это исключает кнопку, вызвавшую событие.

Функция buttons () возвращает текущее состояние кнопок, поэтому, поскольку это событие освобождения, код вернет false, поскольку он больше не нажимается.

Тем не менее документация для функции button () состояния:-

Возвращает кнопку, вызвавшую событие.

Таким образом, вы можете использовать Кнопка () функционировать здесь.

9

По вопросам рекламы [email protected]