Плавная текстовая анимация (текстовый эффект Marquee) с использованием QT
-
22-07-2019 - |
Вопрос
У меня есть вопрос о том, как сделать текст выделенного текста гладким (используя Qt 4.5.3) на не мощном оборудовании (Atom N270 + Intel 945GSM). Мой подход заключается в следующем:
<Ол>Вообще говоря, он движется плавно. Однако чем больше текста я создаю, тем больше загружается ЦП. Когда текст может заполнить 50% экрана (1920x1680), загрузка процессора составляет около 70-80%. Текстовая анимация становится немного мерцающей. Если я установлю интервал таймера на 50 мс или больше, он будет плавным. Но текст движется слишком медленно. Р>
Мой подход неэффективен? Должен ли я использовать OpenGL? Любая подсказка приветствуется и заранее спасибо ^^)
Решение
Вы должны заглянуть в каркас графического представления. Вы можете добавить объекты QGraphicsTextItem в QGraphicsScene и установить координаты вида (масштабирование и перемещение), чтобы ваш текст двигался и отображался в любом размере, в том числе с некоторым текстом, который будет «за кадром»; (вне поля зрения). Я ожидал бы, что это будет намного эффективнее, чем копирование и рисование части (изменяющегося размера) QPixmap при каждом событии таймера.
В документации говорится, что каркас графического представления оптимизирован для одновременной обработки множества объектов. Если это окажется не лучше, вы можете попробовать 4.6 бета. Существуют оптимизации для рендеринга графического представления.
Кроме того, я бы посмотрел на QTimeLine, чтобы помочь вам управлять анимацией. Помимо предоставления основных «галочек» время от времени вы можете устанавливать «кривые формы»; это может начинаться медленно и ускоряться или замедляться по мере приближения конца. Просто имейте в виду, что если вы хотите перезапустить QTimeLine после сигнала завершения (), если вы измените продолжительность и вызовите start () без вызова setCurrentTime (0), таймер запустится со старой продолжительностью в качестве текущего времени.