Мерцание при обновлении картинки в QML
Добрый день.
Получаю от сервера 10-30 картинок в секунду, вот так преобразовываю
- QUrl AppCore::imageToUrl(const QImage &image)
- {
- QByteArray byteArray;
- QBuffer buffer(&byteArray);
- buffer.open(QIODevice::WriteOnly);
- image.save(&buffer, "png");
- QString base64 = QString::fromUtf8(byteArray.toBase64());
- return QString("data:image/png;base64,") + base64;
- }
и отправляю QUrl в sourse Image. На десктопе все более менее работает, только при обновлении других виджетов может получится мерцание. На андроите получается постоянное мерцание (исчезновение карти, отображение фона, последующее отображение картинки). Скажите пожалуйста, в чем может быть дело и как это можно исправить? Может быть можно перевести картинки в видео и так их отображать в QML?
2
99
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- МА1 апреля 2025 г. 16:210ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
Добрый день,
Это у вас типо видеострима работает? А покажите кусок кода, где это функция применяется?
Может дело в том, что у вас пустует source пока конвертируется изображение? Я бы в этом случае испускал сигнал с QUrl вместо прямого использования метода. В таком случае можно будет приконнектиться к AppCore и реагировать уже на готовое изображение и только тогда менять source изображения.
Я получаю ответ от сервера с картинкой в виде массива байт и так обрабатываю через Q_PROPERTY
Так же я пробовал испускать сигнал и передавать полученное значение в QML в source, но мерцание при обновлении сохранилось
Я думаю, что вашу проблему мог бы решить QQuickImageProvider
Вполне возможно что все эти мерцания из-за того, что изображение обновляется совместно со всем интерфейсом, а если это сделать через QQuickImageProvider, то там это будет работать более асинхронно, что может решить проблему.
Тем более, что здесь говорится как раз про потоковую передачу изображений в Image объект в QML
Попробовал. Не помогло.
Класс сделал так
В мэйне записал так
В QML задал источник так
Но при такой реализации отображается только заданная в классе картинка, оно не обновляется при изменении m_pixmap
m_pixmap меняю так
функция requestPixmap вызфвается только один раз
Думаю, тут посложнее код должен быть, я бы попробовал совместить код из imageToUrl, чтобы заменять картинку в провайдере. Пока у меня только такие мысли есть.
Дело в том,что в провайдере и так меняется картинка, просто похоже это дергается только один раз при вызове в мэйне.
Эммм, может тогда ещё поиграть с настройками самого Image? В документации сказано, что есть следующие свойства:
Я уже не знаю, сейчас разве что только пальцем в небе попаду.
Я сделал сигнал обновления картинки и менял потом source картинки так, в таком случае работает без мерцания
Получается, что доколупали.
Решение - QQuickImageProvider + сигнал на обновление. Тоже вариант.