Russian Qt Forum
Июля 07, 2025, 01:56
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Управление событиями
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Управление событиями (Прочитано 12774 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Управление событиями
«
:
Января 07, 2014, 20:11 »
Добрый день
По команде в одном из окон начинает проигрываться анимация до тех пор пока юзер не нажал любую клавишу или мышь в любом др месте (кроме внутри окна с анимацией). При этом само событие (прервавшее анимацию) должно быть проигнорировано, а перерисовка всех окон и активация/деактивация приложения должны работать. Как это сделать?
Спасибо
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Управление событиями
«
Ответ #1 :
Января 07, 2014, 23:08 »
а почему событие должно прерывать анимацию? как одно с другим связано?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Hrundel
Гость
Re: Управление событиями
«
Ответ #2 :
Января 07, 2014, 23:41 »
А нельзя как-нибудь по типу матрешки событие в приложение передавать? По принципу указателя. Перенаправлять от одного к другому обходя нежелательные.
Записан
Bepec
Гость
Re: Управление событиями
«
Ответ #3 :
Января 07, 2014, 23:43 »
Фокус исчезает - пользователь щелкнул на что то внешнее. Профит.
Записан
Akon
Гость
Re: Управление событиями
«
Ответ #4 :
Января 08, 2014, 10:15 »
Ставить фильтр на все события (смотреть в районе QCoreApplication::notify()), в событие есть инфа о приемнике, если приемник не анимационное окно, то прерывать воспроизведение. Событие пускать дальше.
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Управление событиями
«
Ответ #5 :
Января 08, 2014, 11:55 »
Цитата: Akon от Января 08, 2014, 10:15
Ставить фильтр на все события (смотреть в районе QCoreApplication::notify()), в событие есть инфа о приемнике, если приемник не анимационное окно, то прерывать воспроизведение. Событие пускать дальше.
Это решение не отлавливает системные события, а только свои. Если пользователь мышкой активировал чужое окно, то программа не получит события о клике. Решение с фокусом мне кажется более приемлимое, если только это не какая-то экзотическая система с не-десктопной политикой управления фокусом окон.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Управление событиями
«
Ответ #6 :
Января 08, 2014, 12:30 »
Так фокус исчезает и при переключении на др приложение. Вообще с точки зрения ОС это примерно так:
- пользователь нажал в меню бар. Если не установлен обработчик класса меню (или он не реагирует на beginTrack) - приложение ничего не получит, хотя меню откроется и будет управляться мышью/клавой. Когда пункт меню выбран приложение получит событие "команда" и диспетчеризует его - при этом совсем необязательно что расклад окон изменится. Поэтому надеяться на смену фокуса не приходится
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Управление событиями
«
Ответ #7 :
Января 08, 2014, 14:03 »
Цитата: Akon от Января 08, 2014, 10:15
Ставить фильтр на все события (смотреть в районе QCoreApplication::notify()), в событие есть инфа о приемнике, если приемник не анимационное окно, то прерывать воспроизведение. Событие пускать дальше.
notify не ловит команды из меню приложения (как для выбора мышью так и для hotkey)
Записан
Bepec
Гость
Re: Управление событиями
«
Ответ #8 :
Января 08, 2014, 16:36 »
Кхм... Подведём итог
Цитировать
По команде в одном из окон начинает проигрываться анимация до тех пор пока юзер не нажал любую клавишу или мышь в любом др месте (кроме внутри окна с анимацией)
Решение
Цитировать
Фокус исчезает - пользователь щелкнул на что то внешнее. Профит.
Проблема высосанная из пальца, противоречащая задаче
Цитировать
Так фокус исчезает и при переключении на др приложение.
Вопрос к Igors:
Как пользователь может переключиться на другое приложение не используя клавиши, мышь.
Записан
Akon
Гость
Re: Управление событиями
«
Ответ #9 :
Января 08, 2014, 16:53 »
Цитировать
Это решение не отлавливает системные события, а только свои. Если пользователь мышкой активировал чужое окно, то программа не получит события о клике.
Будет событие о потере фокуса.
Цитировать
notify не ловит команды из меню приложения (как для выбора мышью так и для hotkey)
Ну а до команд были же клики/кей эвенты.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Управление событиями
«
Ответ #10 :
Января 08, 2014, 17:27 »
Цитата: Akon от Января 08, 2014, 16:53
Будет событие о потере фокуса.
Оно ни о чем не говорит - напр оно будет и при переключении приложения (когда нет оснований прерывать анимацию)
Цитата: Akon от Января 08, 2014, 16:53
Ну а до команд были же клики/кей эвенты.
Нет, проверял (если надо выложу проект)
Цитата: Bepec от Января 08, 2014, 16:36
Как пользователь может переключиться на другое приложение не используя клавиши, мышь.
Напр кликнул в док (taskbar по-Вашему). Хоть мышь и "использована", никаких мышиных событий приложение не получит.
Цитата: Bepec от Января 08, 2014, 16:36
Кхм... Подведём итог
..
Проблема высосанная из пальца, противоречащая задаче
Категоричность/уверенность Ваших суждений немного не соответствует наивности предложенных Вами решений
«
Последнее редактирование: Января 08, 2014, 17:29 от Igors
»
Записан
Bepec
Гость
Re: Управление событиями
«
Ответ #11 :
Января 08, 2014, 18:30 »
Пользователь кликнул в taskbar, фокус приложения потерян. Что ещё нужно вашему беспокойному разуму?
Фокус окна будет потерян. И придёт сообщение в виде WM_INACTIVE и преобразуется в QEvent::ЧтотоТамOutFocus
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Управление событиями
«
Ответ #12 :
Января 08, 2014, 21:25 »
блин, 5 раз прочитал вопрос.... я так и не понял логику работы приложения и требования
я тупой?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Bepec
Гость
Re: Управление событиями
«
Ответ #13 :
Января 08, 2014, 21:35 »
Аналог куба, что сейчас распространён. Когда ты на него нажал, он проигрывается. Потеря фокуса - он застыл на том моменте когда играет.
Удобно когда он встроен в страницу из нескольких. Посмотрел, щелкнул куда либо, он умолк.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Управление событиями
«
Ответ #14 :
Января 09, 2014, 09:42 »
Цитата: Racheengel от Января 08, 2014, 21:25
блин, 5 раз прочитал вопрос.... я так и не понял логику работы приложения и требования
я тупой?
Можно плясать от термина "модальность". Анимация меняет состояние многих объектов, поэтому все обычные действия с ними должны быть запрещены, иначе обработчики рухнут. Пользователь может:
- наблюдать анимацию
- переключаться на др приложение и обратно
- закончить анимацию нажав клаву или мышь
Цитата: Bepec от Января 08, 2014, 21:35
Аналог куба, что сейчас распространён. Когда ты на него нажал, он проигрывается. Потеря фокуса - он застыл на том моменте когда играет.
Здесь анимация не "останавливается" а "заканчивается", все объекты сбрасываются в рабочее состояние и все отрисованное анимацией исчезает.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...