Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Май 09, 2015, 06:37



Название: MousePress + Modal
Отправлено: Igors от Май 09, 2015, 06:37
Добрый день

Точно так же как в фильтры в фотошопе: есть окно с картинкой, над ним висит небольшой модальный диалог в котором таскаются слайдеры и др, при этом картинка обновляется. Хорошо, но вот теперь надо курсором-кисточкой выбрать пиксель картинки не закрывая диалога. Ну и получаю тук-тук-тук, модальный диалог не пущает. Как это порешать?

Спасибо


Название: Re: MousePress + Modal
Отправлено: Fregloin от Май 09, 2015, 08:25
модальный диалог вызываете через exec? вызывайте его через show + родитель должен быть главное окно, тогда диалог будет висеть поверх всех, но не блокировать остальные.


Название: Re: MousePress + Modal
Отправлено: Igors от Май 09, 2015, 08:35
модальный диалог вызываете через exec? вызывайте его через show + родитель должен быть главное окно, тогда диалог будет висеть поверх всех, но не блокировать остальные.
Тогда он уже не будет модальным - а это требуется.


Название: Re: MousePress + Modal
Отправлено: Bepec от Май 09, 2015, 10:45
1) вы  можете установить eventFilter на главное окно.
2) вы  можете отловить в eventFilter координаты мыши.
3) имея ф-цию, возвращающую пиксель вы можете получить данные(ну что там вам надо - цвет, координаты и прочие атрибуты).

Cпециально для Igors:
4) установка и снятие фильтра происходит при создании удалении диалога.
5) да, дополнительные условия я не учитывал.
6) выдвигайте дополнительные условия, мне интересно :D

PS не совсем уверен что при модальном диалоге главное окно получит координаты, но тогда можно сделать финт ушами - ловить глобальные координаты, мапить на виджет с картинкой и получать пиксель :)


Название: Re: MousePress + Modal
Отправлено: Igors от Май 09, 2015, 10:56
1) вы  можете установить eventFilter на главное окно.
Ага, ну вот не знал я ничего про eventFilter и поперся на форум спрашивать :) Не ловит фильтр ничего, блокируется модальностью

PS не совсем уверен что при модальном диалоге главное окно получит координаты, но тогда можно сделать финт ушами - ловить глобальные координаты, мапить на виджет с картинкой и получать пиксель :)
А как я узнаю что мыша нажата ??? По таймеру проверять - ну как-то совсем коряво


Название: Re: MousePress + Modal
Отправлено: Bepec от Май 09, 2015, 12:01
А по другому вы не обойдёте. И не обзывайте основополагающий принцип интерактивности, опрос по таймеру, корявым. Без него вы и мышкой не шевельнёте :D

Попробовал - распишу.
1) при модальном диалоге все евенты родителя обрываются. В том числе нажатия мыши, передвижение и прочая.
2) если опрашивать по таймеру слот, отсылающий данные о состоянии указателя (QCursor::pos и mouseButtons ()), то всё работает, очень шустренько и приятно на взгляд.

3) поковырял нутри Qt, фиг снимешь блокировку событий немодального окна, так что таймер в руки.

PS ну есть конечно вариант в главном окне устроить постоянный опрос опять таки по таймеру и вывести келлбек функцию, но эт уже извращение на мой взгляд :D


Название: Re: MousePress + Modal
Отправлено: GreatSnake от Май 09, 2015, 15:58
Ага, ну вот не знал я ничего про eventFilter и поперся на форум спрашивать :) Не ловит фильтр ничего, блокируется модальностью
Навесьте eventFilter на QApplication.


Название: Re: MousePress + Modal
Отправлено: Igors от Май 09, 2015, 16:14
Навесьте eventFilter на QApplication.
Глухо как в танке, вообще никаких событий (кроме таймера) пока мыша вне модального окна. Покопался в исходниках, вроде блокируется самим OSX  :'(

А с таймером - мало того что позор, так надо еще как-то "бум" убрать (звуковой сигнал ошибки) и это тоже делать нечем


Название: Re: MousePress + Modal
Отправлено: Bepec от Май 09, 2015, 16:59
Я ж грю поковырялся - модальность диалога обеспечивается тем, что ни одного евента то окно не получает. Где то глушится :D


Название: Re: MousePress + Modal
Отправлено: Igors от Май 11, 2015, 11:12
А по другому вы не обойдёте.
Вы в этом уверены?  :)


Название: Re: MousePress + Modal
Отправлено: Bepec от Май 11, 2015, 13:48
Да, если затратить примерно 20 минут. При затрате большего количества времени ответ может измениться :)


Название: Re: MousePress + Modal
Отправлено: Igors от Май 12, 2015, 09:55
Да, если затратить примерно 20 минут. При затрате большего количества времени ответ может измениться :)
Ваша смелость может сравниться только с Вашими знаниями  :)

Делается, причем несложно и совершенно легально


Название: Re: MousePress + Modal
Отправлено: Bepec от Май 12, 2015, 10:51
Храните эту тайну веками, передавайте только кровным родственникам и убивайте шпионов :)

PS ну или уменьшите самомнение своё и напишите решение :)