Russian Qt Forum

Qt => Qt Quick => Тема начата: Kron от Сентябрь 15, 2016, 09:50



Название: Qt+GIF на Android
Отправлено: 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?


Название: Re: Qt+GIF на Android
Отправлено: qate от Сентябрь 15, 2016, 11:53
я бы рассмотрел возможность написания своего класса просмотра gif с подкачкой данных - всяко гибче получится, потом может и перемотку кому захочется или чего еще


Название: Re: Qt+GIF на Android
Отправлено: Kron от Сентябрь 16, 2016, 06:08
я бы рассмотрел возможность написания своего класса просмотра gif с подкачкой данных - всяко гибче получится, потом может и перемотку кому захочется или чего еще
Я тоже над этим задумывался, но это упирается в время написание, ибо готового подобного в интернете нет. Есть разбор формата gif по байтово и С++ декодирование. Хотелось бы реализовать готовыми методами.


Название: Re: Qt+GIF на Android
Отправлено: qate от Сентябрь 16, 2016, 08:40
Хотелось бы реализовать готовыми методами.

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


Название: Re: Qt+GIF на Android
Отправлено: Kron от Сентябрь 16, 2016, 09:46
можно попробовать при чтении очередной порции данных просто посмотреть и подрезать до корректного размера и далее передать данные файла готовому классу отображения gif

ммм... интересный вариант. Я думал писать свой плеер из-за того, что не получается с QML. Спасибо, попробую при скачивании буфер считывать, разбирать байты и скармливать уже QMovie.