Updating multiple QImages on QML::Image view displays only the last one
-
I have Image qml component to display QImages. Following is the
QML
code for it.Code:
Item { Image { id: my_qimage_viewer anchors.fill: parent } Connections { target: qimage_selector_cpp_backend onQImageDisplayRequested: { my_qimage_viewer.source = next_qimage_source console.log("New qimage sent for display is : " + my_qimage_viewer.source) } } }
What is working:
I have a C++ class using QQuickImageProvider to supplyQImage
s with different IDs every time.This technique basically works if I update single
QImage
s on selection of some button by user. I can generate aQImage
on the fly & update it onmy_qimage_viewer
. Also able to display multiple different images on demand from user. This proves that my technique usingQQuickImageProvider
is basically working.What is not working
But, here is where the problem arises. when I send manyQImage
s subsequently, like 50-60 of them all in a for loop, then it does not display all but only displays the last one sent for update !My objective here is to try play 50-60
QImage
s with some millis gap in between to make them appear like a video/animation. Is it that the Image component is not made for such kind of use? Or is it that I am doing some mistake?Question:
May be I should wait for eachQImage
to be display complete before updating the next? How can I do that if that is whats missing?Is there an example of an app using Image to display multiple
QImage
s making it appear like a video or animation? -
Hi,
You for loop will block the event loop so it's not really a good idea. What about just using a QTimer with the adequate speed to trigger the update ?
-
@SGaist thanks for your attention on this.
May be I should use an
thread
to run the for loop ? Then update theQImage
based on some queued signal or slot ? Is there a standard example of updating multipleQImage
s on a QML::Image component ? -
Something is not clear: do you have multiple
Image
object using the same provider that you want to update or do you have oneImage
component that you want too use as some sort of video widget ? -
@SGaist I have only one
Image
component which I want to update withQImage
s consecutively. Yes basically use it like a VideoWidget. But, I figured out the reason of the issue. the for loop was blocking the main event loop as you said :-) thanks