|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
Qt с задержкой реагирует на клавиатуру и мышь11.10.2025, 19:23. Показов 2225. Ответов 45
Метки нет (Все метки)
В простом проекте без нагрузки сделал QWindow, рядом с позицией курсора (
QCursor::pos()) рисуется фигура. Её реакция отстаёт от курсора на целых 3 кадра. А реакция на keyPressEvent вообще 5 кадров. Причём рисование окна идёт с ускорением OpenGL. Отключение vsync задержку не убирало, только делало короче по времени (из-за того что сам кадр стал короче), но если мерить в кадрах - она даже длиннее становилась - 5 кадров вместо 3. Можно ли средствами Qt убрать эту тормознутость, или спасение только в winapi?
0
|
|
| 11.10.2025, 19:23 | |
|
Ответы с готовыми решениями:
45
QFileSystemWatcher не реагирует на изменения в общей папке сети
|
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|||
| 24.10.2025, 14:41 [ТС] | |||
renderNow считать время (если это место всегда одно и то же). Т. к. renderNow работает циклически. Это в любом случае будет период цикла. Не учли текущую swapBuffers - зато учли предыдущую. Можете сами проверить.
0
|
|||
|
362 / 216 / 53
Регистрация: 18.10.2017
Сообщений: 2,337
|
|
| 24.10.2025, 16:22 | |
|
Я скомпилировал приложенный вариант, у меня вообще нет реакции на мышь. Серый круг ходит слева направо и обратно.
На кнопки "Стрелка вверх/вниз/влевов/право" реагирует изменением размера. Также в левом верхем углу есть строки render: 16ms frame: 16ms Если не нажимать клавиши, то render: 0ms.
0
|
|
|
362 / 216 / 53
Регистрация: 18.10.2017
Сообщений: 2,337
|
|
| 24.10.2025, 18:31 | |
|
Задержка есть, причину ещё не искал.
0
|
|
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
| 25.10.2025, 12:54 [ТС] | |
|
0
|
|
|
Заблокирован
|
|||||||
| 25.10.2025, 15:44 | |||||||
|
Про всю иерархию и систему сообщений Qt. Начиная с QCoreApplication. Как костыль, куда его правильно вставить в такой, довольно плохой архитектуре событий как в твоем примере, я хз:
0
|
|||||||
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
| 26.10.2025, 01:01 [ТС] | |
|
SmallEvil,
processEvents() уже пробовал. Вызывает непонятные краши. Кроме того, не рекомендуется самими авторами Кьюти.И "корень" тут я хз где, потому что, как уже писал, даже прямой асинхронный вызов клавиши из WinAPI (т. е. в обход всего механизма Кьюти) никак на задержку не влиял. А чем тебе плоха "архитектура событий" в моём почти тривиальном примере? Предложи тогда хорошую
0
|
|
|
Заблокирован
|
||||||||||
| 26.10.2025, 01:59 | ||||||||||
|
Хотя да, такое ощущение что может быть рекурсия. Хоть я её и не вижу. Для твоего случая у Qt припасено спец. случай для таймера.
0
|
||||||||||
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|||||
| 26.10.2025, 16:47 [ТС] | |||||
keyPressEvent, а вызывая GetAsyncKeyState из WinAPI, прямо перед отрисовкой. Выше всё писал же.
Добавлено через 2 часа 30 минут Интересно. Поставил таймеру период большой, например apptimer -> start(250) - тогда действительно та задержка пропадает. И реакция идёт через 1 кадр. И только если сильно увеличивать нагрузку (так что её рисование занимает дольше 250 мс) - тогда 4-кадровая задержка появляется. Значит действительно таймер забивает события клавиатуры (хотя по докам не должен).Тогда по идее надо сделать этот таймер single shot, и в конце renderNow запускать его снова (с ненулевым периодом).Попробовал - и нифига, всё та же задержка. Хотя по идее уже ничто не забивает события. И как быть тогда? Как тогда обеспечить цикличность renderNow с высокой частотой (ограниченной только скоростью рендеринга), но чтобы между её вызовами обрабатывались все события?
0
|
|||||
| 26.10.2025, 16:49 | |
|
0
|
|
|
362 / 216 / 53
Регистрация: 18.10.2017
Сообщений: 2,337
|
|
| 26.10.2025, 17:20 | |
|
Я запустил ещё раз - задержка происходит после использования клавиш "Вверх/Вниз". когда движется тёмно-зелёный прямоугольник.
При запущенном "Systrem monitor" видно, что его перерисовка загружает процессор. Светло-серый круг совершенно не загружает, ни при движении, ни при изменении размера.
0
|
|
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
| 26.10.2025, 18:02 [ТС] | |
|
peter_irich, не надо тут это писать. Лучше что-нибудь полезное напиши.
0
|
|
|
Заблокирован
|
||
| 26.10.2025, 18:06 | ||
|
Я не вижу у себя задержки, по крайней мере по своим критериям. Может эксперт увидит.
0
|
||
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
| 26.10.2025, 23:12 [ТС] | |
|
SmallEvil, та же задержка.
Добавлено через 1 час 44 минуты SmallEvil, у тебя значение "frame" сколько мс показывало когда ты проверял? У себя тестил на 2 разных машинах (и свои тоже) - на обеих та же задержка.
0
|
|
|
Заблокирован
|
||
| 26.10.2025, 23:36 | ||
|
Но какая разница? На таймерах толкового игрового цикла не получишь.
0
|
||
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
| 26.10.2025, 23:55 [ТС] | |
|
SmallEvil, я уже сделал и совсем без таймера, вызывая
requestUpdate() в конце отрисовки, и перехватывая QEvent::UpdateRequest - как в доках написано. Всё ровно так же, хоть тресни. Clean в проекте делал.Добавлено через 5 минут SmallEvil, у тебя на скрине frame показывает 1744 мс. И хочешь сказать что реакция программы на нажатие у тебя также следует примерно через 1,7 с? У меня при таких условиях - только через 7 - 8 с.
0
|
|
|
Модератор
|
||
| 27.10.2025, 15:59 | ||
|
Еще не известно как под капотом Qt все это рисует, там может не в 1 проход, а так же с промежуточными буферами/текстурами.
0
|
||
|
Заблокирован
|
|
| 27.10.2025, 18:50 | |
|
И ещё с этими таймерами, зависит от аппаратной составляющей, драйверов и ОС.
Как видим, один и тот же код ведет себя немного по разному на разных машинах/ОС. И ещё одно, на счет такого ввода. Какой практический смысл? Ведь естественно что когда происходит долгий рендеринг то нет никакой гарантии получения других сообщений. То что QT где то там хранит небольшую очередь ввода от мыши/клавиатуры, это, ну такое себе.
0
|
|
|
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 213
|
|
| 27.10.2025, 19:25 [ТС] | |
|
0
|
|
|
Заблокирован
|
|||
| 27.10.2025, 19:48 | |||
|
Там где много похожих значений, там было нажато быстро много ESC. Могу видео сделать. Код был модифицирован не критично. Старт таймера с аргументом 0. И я убрал метод kepressed, так как ты уже event переопределил. Просто было пару экспериментов. Добавлено через 2 минуты Windows 10 x64, двухлетний бюджетный ноут с SSD, со встроенной видяхой. Отключены фаерволы дефендоры ОС(чистое зло). Добавлено через 1 минуту Но это, опять же, некритично.
0
|
|||
|
Заблокирован
|
|
| 27.10.2025, 19:51 | |
|
Прикрепил исходники, толку от них будет ноль, мы уже всё выяснили бинарниками.
0
|
|
| 27.10.2025, 19:51 | |
|
Помогаю со студенческими работами здесь
40
QtCreator не реагирует на изменение файлов формы KeyPressEvent не реагирует на нажатия стрелок
Слот не реагирует на сигнал Слот не реагирует Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|