在QML :: Image视图上更新多个QImages仅显示最后发送的QImages
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在QML :: Image视图上更新多个QImages仅显示最后发送的QImages相关的知识,希望对你有一定的参考价值。
我有Image qml组件来显示QImages。以下是QML
代码。
码:
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)
}
}
}
工作原理:
我有一个使用QQuickImageProvider的C ++类,每次都为QImage
s提供不同的ID。
如果我在用户选择某个按钮时更新单个QImage
s,这项技术基本上有效。我可以在飞行中生成一个QImage
并在my_qimage_viewer
上更新它。还能够根据用户的要求显示多个不同的图像。这证明我使用QQuickImageProvider
的技术基本上是有效的。
什么不起作用
但是,这就是问题出现的地方。当我随后发送许多QImage
s时,就像其中50-60个都在for循环中一样,然后它不显示全部,只显示最后一个发送更新!
我的目标是尝试玩50-60 QImage
s,两者之间有一些毫差距,使它们看起来像一个视频/动画。是不是Image组件不是为这种用途而制造的?还是我犯了一些错误?
题:
可能是我应该等待每个QImage
在更新下一个之前显示完成?如果丢失了怎么办?
是否有一个使用Image显示多个QImage
s的应用程序的示例,使其看起来像一个视频或动画?
如果您使用for-loop
,您没有时间来显示和更新图像,您应该在每个图像之间留出一点时间。
假设图像的采集时间小于某个值,例如小于1/60秒,我们可以在适当的步骤中使用NumberAnimation
设置:
Window {
visible: true
width: 640
height: 480
Image {
property int number
id: name
source: "image://numbers/"+number
NumberAnimation on number {
from:0
to: 60
duration: 1000
}
}
}
imageprovider.h
#ifndef IMAGEPROVIDER_H
#define IMAGEPROVIDER_H
#include <QQuickImageProvider>
#include <QPainter>
#include <QTime>
class ImageProvider : public QQuickImageProvider
{
public:
ImageProvider():QQuickImageProvider(QQuickImageProvider::Image){
qsrand(QTime::currentTime().msec());
}
QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize){
int width = 100;
int height = 50;
if (size)
*size = QSize(width, height);
QImage img(requestedSize.width() > 0 ? requestedSize.width() : width,
requestedSize.height() > 0 ? requestedSize.height() : height, QImage::Format_RGB32);
img.fill(QColor(qrand() % 256, qrand() % 256, qrand() % 256));
QPainter painter(&img);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.drawText(QRectF(QPointF(0, 0), img.size()), Qt::AlignCenter,
QTime::currentTime().toString("hh:mm:ss.z")+" "+id);
painter.end();
return img;
}
};
#endif // IMAGEPROVIDER_H
一个完整的例子可以在以下link中找到
以上是关于在QML :: Image视图上更新多个QImages仅显示最后发送的QImages的主要内容,如果未能解决你的问题,请参考以下文章
使用多个视图在 QML 中查看、编辑和更新数据(来自 C++),而数据保留在 C++ 中(订阅数据)