Russian Qt Forum
Ноябрь 22, 2024, 23:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt+GIF на Android  (Прочитано 3728 раз)
Kron
Гость
« : Сентябрь 15, 2016, 09:50 »

Добрый день. Стоит такая задача. Написать приложение на Qt для Android, чтобы можно было просматривать gif анимации. В свою очередь гифки скачиваются по url. Если Gif скачать как обычный файл, то мы ждем пока скачается весь файл(а вес 5-10 мб, что для мобильного интернета многовато), а потом уже можно будет его просмотреть. Вариант это открывать gif через браузер, то есть webview. Тогда мы сможем смотреть анимацию пока она будет качаться. WebKit и WebKitWidgets не поддерживаются на android. Пишут на форумах, что только WebView - QML и WebEngine Qt. С WebEngine возникли проблемы, компилятор не хотел делать билд под Android из-за того, что он не мог найти модуль(скачивал даже последнию версию Qt, ставил на MacOS - не помогло).
Тогда обратил внимание на QML. С ним раньше не работал и опыта мало. Но нашел пример интеграции QML в Qt с помощью QDeclarativeView и QQuickEngine на офф. сайте. И тут возникла проблема. QQuickEngine загружает GIF как надо, но только он рисует поверх(overlay) содержимого Widget, что мне не подходит.
Код:
QQuickView *quickView = new QQuickView;
quickView->setResizeMode(QQuickView::SizeRootObjectToView);
quickView->setSource(source);
m_layout->addWidget(QWidget::createWindowContainer(quickView));

 QDeclarativeView встраивается в виждет в Qt и рисует зеленый квадрат:     
Код:
QDeclarativeView *qmlView = new QDeclarativeView(QUrl("qrc:/opnhtml.qml"));
qmlView->setResizeMode(QDeclarativeView::SizeViewToRootObject);
vbox->addWidget(qmlView,0,Qt::AlignCenter);

qml opnhtml.qml (просто пример, чтобы просмотреть откроется ли страничка)
Код:
import QtQuick 1.0
//import QtWebKit 1.0

Rectangle {
    width: 400
    height: 400
    color: "green"
/*
    WebView {
        id: web_view1
        anchors.fill: parent
        url: "http://google.ru"
    }
    */
}

Но когда я в qml файле раскомментирую хотя бы  import QtWebKit 1.0. На экране ничего, просто белый фон. И соответственно если убрать и комментарии на теле WebView все тот же белый экран и ничего не происходит. Подскажите, пожалуйста, решение. Если можно загружать и проигрывать gif одновременно, не открывая его как страничку(без использования QML, WebEngine), скиньте пример или в какую сторону копать напишите. Или что неправильно сделал с QML WebView?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Сентябрь 15, 2016, 11:53 »

я бы рассмотрел возможность написания своего класса просмотра gif с подкачкой данных - всяко гибче получится, потом может и перемотку кому захочется или чего еще
Записан
Kron
Гость
« Ответ #2 : Сентябрь 16, 2016, 06:08 »

я бы рассмотрел возможность написания своего класса просмотра gif с подкачкой данных - всяко гибче получится, потом может и перемотку кому захочется или чего еще
Я тоже над этим задумывался, но это упирается в время написание, ибо готового подобного в интернете нет. Есть разбор формата gif по байтово и С++ декодирование. Хотелось бы реализовать готовыми методами.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Сентябрь 16, 2016, 08:40 »

Хотелось бы реализовать готовыми методами.

можно попробовать при чтении очередной порции данных просто посмотреть и подрезать до корректного размера и далее передать данные файла готовому классу отображения gif
Записан
Kron
Гость
« Ответ #4 : Сентябрь 16, 2016, 09:46 »

можно попробовать при чтении очередной порции данных просто посмотреть и подрезать до корректного размера и далее передать данные файла готовому классу отображения gif

ммм... интересный вариант. Я думал писать свой плеер из-за того, что не получается с QML. Спасибо, попробую при скачивании буфер считывать, разбирать байты и скармливать уже QMovie.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.