LINUX.ORG.RU

Qt, анимация без AnimationFramework.


0

1

Есть окно с графиком функции. Хочется его обновлять с частотой 30...60 fps (чтобы было плавно), пересчитывая функцию. Это как видеоплеер, где кадры вычисляются матаном. AnimationFramework тут был бы лишним - мне не надо организовывать хитрое движение всяких объектов, меняя их параметры, нужно просто обновлять один QPixmap и обновлять его в окне.

Варианты? QTimer 30 fps?

Пробовл QTimer. Всё хорошо, но такая проблема: угадать частоту обновления: на одной линукс-машине всё плавно при 30 ударах таймера, на винде эти 30 выглядят как 15 - то-ли какая-то рассинхронизация в виндовым рисователем экрана, то-ли чё, но если поставить 50, то всё волшебно излечивается. Но создаётся нагрузка на проц - нафиг мне 30, если всё кино - 24 и там всё плавно.

Вторая проблема с QTimer: может быть это тоже оверкилл? Может надо как-то проще? Как AnimationFramework внутри себя угадывает FPS и как обновляет окно?

★☆

Последнее исправление: kiverattes (всего исправлений: 3)

А что на каждой из систем выдаст свойство QTimer::interval? Одинаковые значения? Задание тоже одинаковое?

one_more_hokum ★★★
()
Ответ на: комментарий от kiverattes

Я про то, что в порте на виндоуз этого класса может быть ошибка, ты задаёшь одно значение, а в потрохах QTimer оно бьётся пополам (например).

one_more_hokum ★★★
()

на одной линукс-машине всё плавно при 30 ударах таймера, на винде эти 30 выглядят как 15

Про это уже сто раз на лоре писали. Вообще, насколько я помню, все подобные темы все-равно скатывались в то, что проще использовать AnimationFramework, но можешь ради интереса поискать по форуму.

Ну а если уж так хочется оставить QTimer, то #ifdef тебе в руки, и вперед.

solovey ★★
()

Хм... Я, честно говоря, не знаю Qt, но знаю, что на Винде есть два вида таймеров: обычные и мультимедиа-таймеры. По умолчанию resolution обычных таймеров — 15,6 мс.

Есть способы сменить частоту стандартных таймеров. Однако если нужна максимальная точность, нужно применять Multimedia Timers.

Поэтому если QTimer работает на стандартных таймерах, у тебя проблема.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 2)
Ответ на: комментарий от kiverattes

Ух-ты, это интересно. Надо с тобой дружить, у меня нет знакомых виндопрограммеров почти )

Я раньше виндопрограммировал, а сейчас уже многое забыл. Но помню, что хотя обычно ошибки вызваны кривизной рук, но иногда там реально засады, подобные этой.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Прочитал по диагонали статью про таймеры. Ты сказал про 2 вида таймеров... Насколько я помню времена кодинга на asm под 386, таймер я помню только 1. Тот таймер, для которого в линуксе 250 Гц стоит, по которому задачи переключаются. А мультимедийный - это откуда? И почему тогда приложения, которым нужно высокое разрешение не юзают «мультимедийный», а наращивают частоту «обычного»? Или «мультимедийный» - это обычный с изменённой частотой? )

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

это не таймер, а QueryPerformanceCounter - возвращает условное число тактов процессора. Почему условное? - потому что корректируется системой для учета динамического переключения частоты процессора, троттлинга и прочего. QueryPerformanceFrequency - возвращает число тактов в секунду. Можно мерить временные интервалы

anonymous
()
Ответ на: комментарий от kiverattes

Насколько я помню времена кодинга на asm под 386, таймер я помню только 1.

Ну, во-первых, с тех пор ещё придумали HPET. F dj<kby? e vtyz jgznm yfrhskcz vjybnjh? pdbyzq? ytvjue ljgbcfnm/ Vjue? jlyfrj? crfpfnm? xnj ltkj pltcm yt d njv? rfrjt j,jheljdfybt cnjbn, f d njv? rfr xfcnj jcm ,eltn gj nbre nfqvthf lthufnm ghbkj;tybt/

proud_anon ★★★★★
()
Ответ на: комментарий от kiverattes

Чё-то много непонятных слов...

Ой-ёй... сорри.

А во<лин, у меня опять накрылся монитор, звиняй, немогу дописать. Могу, однако, сказать, что дело здесь не в том, какое оборудование стоит, а в том, как часто ось будет по тику таймера дергать приложение/

proud_anon ★★★★★
()
Ответ на: комментарий от kiverattes

А ты случайно виндовые сервисы не разрабатывал?

Нет, никогда.

proud_anon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.