gpt4 book ai didi

c++ - Qt更新显示的QImage

转载 作者:太空宇宙 更新时间:2023-11-04 09:01:02 27 4
gpt4 key购买 nike

我使用一个 SDK 从相机获取图像,该 SDK 以 unsigned char 数组形式返回数据。但是这个 SDK 不提供显示数据的功能,所以我尝试在 Ubuntu 12.04 下使用 Qt 4.8 来实现它。

目前我的代码是这样的:

#include <QtGui/QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsPixmapItem>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);

while (..) // condition which breaks after a number of images where grabbed
{
// Get the image from the third party SDK into an unsigned char array
// named pImageBuffer

QImage image ((unsigned char *) pImageBuffer,
GetWidth(),
GetHeight(),
QImage::Format_Indexed8);

QVector<QRgb> colorTable(256);
for(int i=0;i<256;i++)
colorTable[i] = qRgb(i,i,i);
image.setColorTable(colorTable);

QPixmap pixmap = QPixmap::fromImage(image);
QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap);
scene.addItem(item);

view.show();
a.exec();
}
}

这按预期工作,图像显示正确。但是 a.exec() 会阻塞主线程,直到我关闭 QtWindow。

有什么简单的方法可以修改它,让窗口一直保持打开状态,只更新显示的图像吗?目前性能根本不重要,但我需要保持代码简单。

最佳答案

虽然调用 QApplication::processEvents 会起作用,但这只是一种 hack 而不是最佳解决方案。

理想情况下,图像采集器应该作为从 QObect 派生的对象在单独的线程上运行。该对象发出它接收到的图像的信号,这些信号由主线程上的对象接收。

然后接收对象可以在 QGraphicsPixmapItem 对象上设置图像。

请注意,问题中的代码会为从抓取器接收到的每个图像创建一个新的 QGraphicsPixmapItem。假设您想要创建一个动画图像,您应该只创建一个 QGraphicsPixmapItem 并将其添加到场景中。

使用 QThread 非常简单,如果您以前没有用过,我建议您 read this article ,它通过示例代码清楚地解释了要做什么。

关于c++ - Qt更新显示的QImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21335407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com