2012-08-26 3 views
3

카메라에서 이미지를 수집하기 위해 부스트 스레드를 사용하고 새 이미지가 도착할 때마다 Qt 신호를 호출합니다. 이제이 신호가 나올 때 연결 슬롯 실행을 통해 위젯을 업데이트합니다. 내 슬롯에는 컨트롤이 있지만 디버깅을 위해 콘솔에 출력하는 동안 위젯은 업데이트되지 않습니다. 내 질문은이 슬롯이 주 스레드 또는 신호를 방출하는 스레드에서 실행되는지 여부와 원하는 업데이트를 달성하는 방법입니다. 감사합니다.부스트 스레드가있는 Qt 업데이트 GUI

+1

부스트를 사용하지는 않았지만, Qt는 스레드를위한 정말로 깨끗하고 간단한 인터페이스를 가지고 있습니다. [QThread] (http://doc.qt.nokia.com/4.7-snapshot/qthread.html) –

답변

1

슬롯은 Qt 위젯을 만든 모든 스레드에서 실행됩니다. Qt는 크로스 스레드 신호와 슬롯에서 QueuedConnection을 사용합니다.

편집 :이 유용 할 수 있습니다 signal qt from a non-qt thread, QueuedConnection

당신은 메인 스레드를 차단하고 있습니까?

+0

아니요 주 스레드는 없습니다 루틴에서 실행. 주된 문제는 메인 (GUI) 스레드가 페인팅 및 업데이트 작업을 담당하고 SLOT이 메인 스레드에서 정의 되었기 때문에 여전히 업데이트 할 수없는 이유입니다. 나는 SLOt가 신호 방사 스레드에 의해 실행된다는 것을 의미하는 SLOT에서 GUI와 관련된 것을 제외하고는 다른 작업을 수행 할 수 있습니다. (내가 틀렸다면 나에게 올바른)이 문제에 대해 무엇을 제안 할 수 있습니까? –

+0

연결을 강제로 시도하지 않고 Qt :: QueuedConnection을 사용하도록 결정 했습니까? 제가 본 것에 대한 토론 중 일부는 이것이 필요하다고 말했습니다. 내가 부스트 스레드에서 신호를 방출하려고 시도하지 않았으므로 필요한지 확실하지 않습니다. 이전 응용 프로그램에서이 작업을 수행 한 이후 QThread에서이 작업이 필요하지 않다는 것을 알고 있습니다. – drescherjm

+0

예. 또한 시도했지만 QThread로 부스트에서 내 응용 프로그램을 변경할 수 있습니다. –