Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Февраль 15, 2016, 07:31



Название: Как ловить
Отправлено: Igors от Февраль 15, 2016, 07:31
Добрый день

Не работает один из драгов. Вместо ожидаемого mouseMove по каким-то необъяснимым причинам приходит mouseRelease. Но мышу-то я не отпускал! И, конечно, никаких mouseRelease самостоятельно не посылал. На всякий случай проверил нажата ли мышь средствами OSX - нажата. Вот стало интересно, что делать в такой ситуации

1) "Выкладывай тестовый проект" - такой возможности здесь нет, там все неподъемно

2) Сравнивать этот драг с другими, работающими, до тех пор пока... Ясно что этот трудоемкий метод когда нет ничего лучшего

3) "Ну так ты в отладчике-то посмотри!". Смотрю. Вижу что из очереди достается событие у которого e->buttons равно нулю
Код
C++ (Qt)
void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e)
{
   QEvent::Type type;
   Qt::MouseButtons stateChange = e->buttons ^ buttons;
...
 
И что? Кто и когда положил его в очередь - до этого можно и не докопаться

Какие есть предложения?

Спасибо


Название: Re: Как ловить
Отправлено: GreatSnake от Февраль 15, 2016, 13:08
Под "драгом" подразумевается "mouse press & move" ?
Может в фильтре блокируется?
Что в QGuiApplication::mouseButtons() ?


Название: Re: Как ловить
Отправлено: Igors от Февраль 15, 2016, 13:54
Под "драгом" подразумевается "mouse press & move" ?
Да

Может в фильтре блокируется?
Приходит мистический mouseRelease, который, как и задумывалось, обрабатывается как "юзер отпустил мышу"

Что в QGuiApplication::mouseButtons() ?
Была 1 (левая кнопка), и приходящее mouseRelease сбрасывает в 0 (в ядре Qt).


Название: Re: Как ловить
Отправлено: kambala от Февраль 15, 2016, 14:34
4) пробовать отрезать куски функционала
5) воспользоваться git bisect