Russian Qt Forum
Ноябрь 25, 2024, 15:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: MousePress + Modal  (Прочитано 6718 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Май 09, 2015, 06:37 »

Добрый день

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

Спасибо
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Май 09, 2015, 08:25 »

модальный диалог вызываете через exec? вызывайте его через show + родитель должен быть главное окно, тогда диалог будет висеть поверх всех, но не блокировать остальные.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 09, 2015, 08:35 »

модальный диалог вызываете через exec? вызывайте его через show + родитель должен быть главное окно, тогда диалог будет висеть поверх всех, но не блокировать остальные.
Тогда он уже не будет модальным - а это требуется.
Записан
Bepec
Гость
« Ответ #3 : Май 09, 2015, 10:45 »

1) вы  можете установить eventFilter на главное окно.
2) вы  можете отловить в eventFilter координаты мыши.
3) имея ф-цию, возвращающую пиксель вы можете получить данные(ну что там вам надо - цвет, координаты и прочие атрибуты).

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

PS не совсем уверен что при модальном диалоге главное окно получит координаты, но тогда можно сделать финт ушами - ловить глобальные координаты, мапить на виджет с картинкой и получать пиксель Улыбающийся
« Последнее редактирование: Май 09, 2015, 10:49 от Bepec » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 09, 2015, 10:56 »

1) вы  можете установить eventFilter на главное окно.
Ага, ну вот не знал я ничего про eventFilter и поперся на форум спрашивать Улыбающийся Не ловит фильтр ничего, блокируется модальностью

PS не совсем уверен что при модальном диалоге главное окно получит координаты, но тогда можно сделать финт ушами - ловить глобальные координаты, мапить на виджет с картинкой и получать пиксель Улыбающийся
А как я узнаю что мыша нажата Непонимающий По таймеру проверять - ну как-то совсем коряво
Записан
Bepec
Гость
« Ответ #5 : Май 09, 2015, 12:01 »

А по другому вы не обойдёте. И не обзывайте основополагающий принцип интерактивности, опрос по таймеру, корявым. Без него вы и мышкой не шевельнёте Веселый

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

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

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

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Май 09, 2015, 15:58 »

Ага, ну вот не знал я ничего про eventFilter и поперся на форум спрашивать Улыбающийся Не ловит фильтр ничего, блокируется модальностью
Навесьте eventFilter на QApplication.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Май 09, 2015, 16:14 »

Навесьте eventFilter на QApplication.
Глухо как в танке, вообще никаких событий (кроме таймера) пока мыша вне модального окна. Покопался в исходниках, вроде блокируется самим OSX  Плачущий

А с таймером - мало того что позор, так надо еще как-то "бум" убрать (звуковой сигнал ошибки) и это тоже делать нечем
Записан
Bepec
Гость
« Ответ #8 : Май 09, 2015, 16:59 »

Я ж грю поковырялся - модальность диалога обеспечивается тем, что ни одного евента то окно не получает. Где то глушится Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Май 11, 2015, 11:12 »

А по другому вы не обойдёте.
Вы в этом уверены?  Улыбающийся
Записан
Bepec
Гость
« Ответ #10 : Май 11, 2015, 13:48 »

Да, если затратить примерно 20 минут. При затрате большего количества времени ответ может измениться Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Май 12, 2015, 09:55 »

Да, если затратить примерно 20 минут. При затрате большего количества времени ответ может измениться Улыбающийся
Ваша смелость может сравниться только с Вашими знаниями  Улыбающийся

Делается, причем несложно и совершенно легально
Записан
Bepec
Гость
« Ответ #12 : Май 12, 2015, 10:51 »

Храните эту тайну веками, передавайте только кровным родственникам и убивайте шпионов Улыбающийся

PS ну или уменьшите самомнение своё и напишите решение Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.119 секунд. Запросов: 22.