我有一个函数streamCamera(*callback)
,其中回调是void callback(Image)
,它可以用于在我们想要的任何UI框架中预览流。
我能够在opencv imshow窗口中使用此功能进行流式传输
void callback(image)
{
cv::imshow("image", image);
waitKey(1);
}
而imshow是一个静态函数,可以进行流式传输。
我可以用Qt做类似的事情吗
我尝试了什么,
我有一个继承QMainWindow
的class MainWindow
,在类中,我用ui->graphicsView->scene()->addItem(&pixImage);
将QGraphicsPixmapItem pixImage
附加到ui中
由于回调函数无法访问pixImage
,因此Mainwindow对象不是全局对象。我无法在像素图中设置图像;
因此,我最终进行了一次黑客攻击,只创建了一个全局指针QGraphicsPixmapItem *pixImagePtr
,并在启动streamCamera(*callback)
之前附加了pixImage
,在回调中,我使用pixImagePtr
来设置图像GUI,并且它工作了。
但这种黑客攻击似乎不是正确的方法,所以如果一些qt专家对此有所了解,那将是有帮助的。
听起来像是应该用信号来完成的事情。
假设您有MainWindow
和Worker
类。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);