我的应用程序通过网络(每秒16帧)接收JPEG的实时流。应使用QML显示实时流。接收部分用C ++编写,所有UI都是用QML编写的。
如何将图像数据导入QML窗口?我已经了解了如何显示QImage,但我还没有找到解决方案。
实现QDeclarativeImageProvider并使用不同的名称反复刷新图像源似乎是唯一的解决方案,请参阅http://qt-project.org/doc/qt-4.8/qdeclarativeimageprovider.html。
答案 0 :(得分:7)
是的,遗憾的是Image
元素缺少update()
方法(强制重置它)。 设置完全相同的源URL不会触发更新。
您可以使用类似的方法作为解决方法:
Image {
source: "image://yourImageProvider/something"
cache: false
function reload() {
var oldSource = source;
source = "";
source = oldSource;
}
}
(或者只是在两个URL之间切换,使用相同的提供者名称,但路径不同......)
您还应该将那些您收到的JPEG推送到QML图层。一旦你收到一个新的图像,你应该从C ++的一侧发出一个信号,从一个暴露在QML引擎中的对象,并将该信号连接到该reload()
函数。 Connections
元素可以帮助您。
Connections {
target: myC++ObjectExposedToTheQMLEngine
onNewFrameReceived: image.reload();
}