我正在使用结构化光源,并且我有QCamera
和QProjector
我写的类。当投影机投射一个图案时,它必须等待所有连接的相机捕捉该图案,然后才能移动到下一个相机。使QObject在执行函数之前等待其侦听器
我目前的模式是这样的:
QProjector
项目图像,并发出信号patternProjected(Pattern*)
。- 连接
QCamera
s接收信号并连接到投影机的hold()
信号(见下文)。摄像机然后开始异步捕获图像,并在完成后发出frameCaptured(cv::Mat)
。
以前我在QProjector
有一个hold()
插槽。谁曾想投影仪的相机等待它会叫
connect(projector,SIGNAL(hold()),camera,SLOT(wait()))`
其中camera->wait()
是一个虚拟函数。然后,在projector->disconnectNotify()
中,投影机检查receivers(SIGNAL(hold()))
是否为零。如果是,则投影机会继续进入队列中的下一个模式;如果不是,它会再等一会儿。
这种方法非常混乱,它甚至不起作用 - 无法保证投影机不会移动到发射patternProjected()
和从相机接收连接之间的下一个模式。
任何人都有一个更清洁的方法,理想情况下更符合QObject
哲学?
谢谢,这是真正朝着正确的方向轻推。 我现在在投影机中有一个'aboutToAdvance()'信号,它连接到'projectorAboutToAdvance()'插槽。当这个插槽被调用时,根据是否允许模式提前,摄像机发出'allowProjectorToAdvance(bool allow)',其中包含true或false。这是通过一个'permissionToAdvance(bool allow)'来收集的,它会递减'waitingFor'计数器,并且如果'allow'为假则增加'deniedAdvance'计数器。如果“waitingFor”为零且“deniedAdvance”不为零,则不允许进步。 – 2013-02-20 19:40:16