Почему всегда вызывать mousePressEvent перед mouseDoubleClickEvent

пожалуйста, рассмотрите следующий код:

#include <QWidget>
#include <iostream>
#include <QApplication>

class Widget : public QWidget
{
public:
void mousePressEvent(QMouseEvent* event)
{
std::cout << "mousePressEvent" < std::endl;
}

void mouseDoubleClickEvent(QMouseEvent* event)
{
std::cout << "mouseDoubleClickEvent" << std::endl;
}
};

int main(int argc, char** argv)
{
QApplication app(argc, argv);
Widget w;
w.show();
return app.exec();
}

Каждый раз, когда я обрабатываю двойной щелчок, вывод:

mousePressEvent
mouseDoubleClickEvent

Это означает, что Qt всегда вызывает mousePressEvent, как только одно нажатие продолжается без ожидания второго нажатия. Есть ли способ отключить эту опцию, чтобы в случае двойного щелчка не выполнялся вызов mousePressEvent?

3

Решение

Я бы обойти обработку события одного клика (используя QTimer) на период времени, равный QApplication::doubleClickInterval() значение. Если в течение этого времени не произошло двойного щелчка, я должен обработать «один щелчок», в противном случае двойной щелчок должен быть обработан.

3

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

Как говорится Qt Documentation: реализация по умолчанию mouseDoubleClickEvent генерирует нормальное событие нажатия мыши.

В qwidget.cpp Вы также можете найти комментарий

mouseDoubleClickEvent () вызывается, когда пользователь дважды щелкает мышью в виджете. Если пользователь дважды щелкает мышью, виджет получает событие нажатия мыши, событие отпускания мыши, (событие щелчка мыши), второе нажатие мыши, это событие и, наконец, второе событие отпускания мыши.

0

Почему бы просто не увеличить на единицу в каждой функции события? В случае двойного щелчка счетчик будет увеличиваться в два раза на один.

Более обобщенное решение: устранить изменения, сделанные mousePressEvent вычитая добавленное значение (также может быть отрицательным).

void mousePressEvent(QMouseEvent* event)
{
counter += singleClickStep;
}

void mouseDoubleClickEvent(QMouseEvent* event)
{
counter -= singleClickStep;
counter += doubleClickStep;
}

singleClickStep а также doubleClickStep значения, на которые вы увеличиваете счетчик в каждом случае.

Ответ Vahancho решает случаи, когда вы не можете отменить то, что было сделано одним щелчком мыши, но QApplication::doubleClickInterval() может быть слишком долго С другой стороны, с моим решением вы уже увидите значение между первым и вторым кликом на вашем виджете.

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