我正在使用結構化光源,並且我有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