2

我的应用程序通过网络接收 JPEG 的实时流(每秒 16 帧)。直播应使用 QML 显示。接收部分是用 C++ 编写的,所有的 UI 都是使用 QML 编写的。

如何将图像数据输入 QML 窗口?我已经查看了如何显示 QImage,但我还没有找到解决方案。

实现 QDeclarativeImageProvider 并使用不同的名称一遍又一遍地刷新图像的源似乎是唯一的解决方案,请参阅http://qt-project.org/doc/qt-4.8/qdeclarativeimageprovider.html

4

1 回答 1

9

是的,不幸的Image是该元素缺少一种update()方法(强制重置它)。设置相同的源 URL 不会触发更新

您可以使用类似的方法作为解决方法:

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

(或者只是在两个 URL 之间切换,提供者名称相同,但路径不同......)

您还应该将收到的那些 JPEG送到 QML 层。收到新图像后,您应该从暴露给 QML 引擎的某个对象从 C++ 端发出一个信号,并将该信号连接到该reload()函数。该Connections元素将帮助您。

Connections {
    target: myC++ObjectExposedToTheQMLEngine
    onNewFrameReceived: image.reload(); 
}
于 2013-07-18T22:21:11.517 回答