Информация об изменениях

Сообщение Re: mouse press & release & double click events от 31.01.2017 22:31

Изменено 31.01.2017 22:33 SaZ

Re: mouse press & release & double click events
Здравствуйте, nen777w, Вы писали:

N>Столкнулся с такой проблемой.

N>Есть у меня самодельный контрол у которого перегружены события mousePressEvent(), mouseReleaseEvent(), mouseMoveEvent()
N>Поведение такое: пользователь нажимает и начинает тащить пин мышкой, затем отпускает, при этом если нажимает не по пину (mousePressEvent()), то пин сам подскакивает под мышку.
N>Понадобилось мне недавно добавить еще mouseDoubleClickEvent() что бы даблкликнув по контролу пользователь мог ввести значение пина.
N>Но тут случилась такая засада... doubleClick то приходит... но перед ним приходят и mousePressEvent() и mouseReleaseEvent(), что не годится совсем.
N>Есть ли нормальный способ избежать этого?

У QApplication есть проперти doubleClickInterval, startDragDistance, startDragTime. По-хорошему их нужно учитывать при реализации своего поведения. Тогда, по идее, ваша проблема разрулится сама собой. Остальное выше написали — надо отслеживать даблклик руками.
Резюмирую: если юзер не протащил мышь достаточное расстояение (startDragDistance), то не считать это операцией перетягивания.
Re: mouse press & release & double click events
Здравствуйте, nen777w, Вы писали:

N>Столкнулся с такой проблемой.

N>Есть у меня самодельный контрол у которого перегружены события mousePressEvent(), mouseReleaseEvent(), mouseMoveEvent()
N>Поведение такое: пользователь нажимает и начинает тащить пин мышкой, затем отпускает, при этом если нажимает не по пину (mousePressEvent()), то пин сам подскакивает под мышку.
N>Понадобилось мне недавно добавить еще mouseDoubleClickEvent() что бы даблкликнув по контролу пользователь мог ввести значение пина.
N>Но тут случилась такая засада... doubleClick то приходит... но перед ним приходят и mousePressEvent() и mouseReleaseEvent(), что не годится совсем.
N>Есть ли нормальный способ избежать этого?

У QApplication есть проперти doubleClickInterval, startDragDistance, startDragTime. По-хорошему их нужно учитывать при реализации своего поведения. Тогда, по идее, ваша проблема разрулится сама собой. Остальное выше написали — надо отслеживать даблклик руками.
Резюмирую: если юзер не протащил мышь достаточное расстояение (startDragDistance), то не считать это операцией перетягивания.

А такое поведение вполне логично. Ибо, если юзер кликнет и не успеет кликнуть второй раз, то когда присылать press/release для первого клика?