我正在使用结构光,我有我写QCamera
的QProjector
课程。当投影仪投射一个图案时,它必须等待所有连接的相机捕捉到该图案,然后才能移动到下一个。
我现在的模型是这样的:
QProjector
投影图像并发出信号patternProjected(Pattern*)
。- Connected
QCamera
s 接收信号并连接到投影仪的hold()
信号(见下文)。然后相机开始异步捕获图像并frameCaptured(cv::Mat)
在完成后发射。
以前我hold()
在QProjector
. 希望投影仪等待它的相机会调用
connect(projector,SIGNAL(hold()),camera,SLOT(wait()))`
哪里camera->wait()
是一个虚拟函数。然后,在 中projector->disconnectNotify()
,投影仪检查是否receivers(SIGNAL(hold()))
为零。如果是,则投影仪将移动到其队列中的下一个图案;如果没有,它会再等一些。
这种方法是一团糟,甚至行不通——不能保证投影仪在发射patternProjected()
和接收来自相机的连接之间不会移动到下一个模式。
任何人都有一种更清洁的方法,最好是一种更符合QObject
哲学的方法?