2013-07-18 3 views
1

Мое приложение получает прямой поток JPEG по сети (16 кадров в секунду). Прямой поток должен отображаться с использованием QML. Принимающая часть написана на C++, весь пользовательский интерфейс написан с использованием QML.QImage в QML

Как получить данные изображения в окне QML? Я посмотрел, как отобразить QImage, но пока не нашел решения.

Реализация QDeclarativeImageProvider и обновление источника изображения снова и снова с использованием другого имени, кажется, единственное решение, см. http://qt-project.org/doc/qt-4.8/qdeclarativeimageprovider.html.

ответ

7

Да, к сожалению, в элементе Image отсутствует метод update() (для принудительного его сброса). Настройка самого исходного URL-адреса не приведет к обновлению.

Вы можете использовать что-то вроде этого, как обходной путь:

Image { 
    source: "image://yourImageProvider/something" 
    cache: false 
    function reload() { 
     var oldSource = source; 
     source = ""; 
     source = oldSource; 
    } 
} 

(Или просто переключаться между двумя URLS, с тем же именем поставщика, но разные пути ...)

Вы должны также нажмите те файлы JPEG, которые вы получаете на уровень QML. Как только вы получите новое изображение, вы должны испустить сигнал со стороны C++ от какого-либо объекта, подверженного QML-движку, и подключить этот сигнал к этой функции reload(). Элемент Connections поможет вам там.

Connections { 
    target: myC++ObjectExposedToTheQMLEngine 
    onNewFrameReceived: image.reload(); 
}