Название: 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 ну или уменьшите самомнение своё и напишите решение :) |