Qt通过回调更新UI中的图像



我有一个函数streamCamera(*callback),其中回调是void callback(Image),它可以用于在我们想要的任何UI框架中预览流。

我能够在opencv imshow窗口中使用此功能进行流式传输

void callback(image)
{
cv::imshow("image", image);
waitKey(1);
} 

而imshow是一个静态函数,可以进行流式传输。

我可以用Qt做类似的事情吗


我尝试了什么,

我有一个继承QMainWindowclass MainWindow,在类中,我用ui->graphicsView->scene()->addItem(&pixImage);QGraphicsPixmapItem pixImage附加到ui中

由于回调函数无法访问pixImage,因此Mainwindow对象不是全局对象。我无法在像素图中设置图像;

因此,我最终进行了一次黑客攻击,只创建了一个全局指针QGraphicsPixmapItem *pixImagePtr,并在启动streamCamera(*callback)之前附加了pixImage,在回调中,我使用pixImagePtr来设置图像GUI,并且它工作了。

但这种黑客攻击似乎不是正确的方法,所以如果一些qt专家对此有所了解,那将是有帮助的。

听起来像是应该用信号来完成的事情。

假设您有MainWindowWorker类。Worker想要显示MainWindow内部的一些图像,您可以这样做。

class MainWindow : public QMainWindow {
Q_OBJECT
// Other members
public slots:
void showImage(const QPixmap &pixmap) {
pixImage.setPixmap(pixmap);
}
};

class Worker : public QObject {
Q_OBJECT
public:
Worker(MainWindow* parent) : QObject{parent} {
connect(this, &Worker::pixmapChanged,
parent, &MainWindow::showImage);
}
signals:
void pixmapChanged(QPixmap pixmap);
}

从现在开始,在Worker内部,您应该可以使用pixmapChanged信号来更改MainWindow图像

const QPixmap pixmap = getNewPixmap();
emit pixmapChanged(pixmap);

相关内容

  • 没有找到相关文章

最新更新