18 개월 후 ... @Mat의 답변으로 댓글을 달기 시작했고 곧 방이 부족해졌습니다. 따라서 대답.
IMO emit
는 통사론 적 설탕도 아니고 단순한 키워드도 아닙니다.
- 위의 @Mat에서 설명한대로 코드를 생성합니다.
- 그것은 도움이
connect
메커니즘은 그것이입니다 실제로 것을 인식 signal
하고,
- 신호와 응답 (슬롯)이 동기식 또는 비동기식으로 실행되거나 신호가 방출되는 위치와 방법에 따라 대기 할 수있는 "더 큰"시스템의 일부가됩니다. 이것은 신호 / 슬롯 시스템의 매우 유용한 기능입니다.
전체 신호 / 슬롯 시스템은 단순한 함수 호출과는 다른 관용구입니다. 관찰자 패턴에서 비롯된 것이라고 생각합니다. a signal
와 a 사이에도 큰 차이가 있습니다 slot
. 신호 는 구현할 필요가 없지만 슬롯 은 !
당신은 길을 걷고 있는데 집에 불이 붙는 것을 본다 (신호). 911에 전화를 겁니다 ( 화재 신호를 911 응답 슬롯에 연결 ). 신호는 방출 된 반면 슬롯 은 소방서 에서 구현 되었습니다. 정확하지 않을 수 있지만 아이디어를 얻습니다. OP의 예를 살펴 보겠습니다.
일부 백엔드 객체는 얼마나 많은 진행이 이루어 졌는지 알고 있습니다. 그래서 그것은 단순히 emit progressNotification(...)
신호를 보낼 수 있습니다. 이 신호를 선택하고 실행하는 것은 실제 진행률 표시 줄을 표시하는 클래스에 달려 있습니다. 그러나 뷰는이 신호에 어떻게 연결됩니까? Qt의 신호 / 슬롯 시스템에 오신 것을 환영합니다. 이제 뷰 객체와 데이터 계산 객체 (둘 다 QObjects
) 로 구성된 관리자 클래스 (일반적으로 일종의 위젯 )를 생각할 수 connect (m_myDataEngine, &DataEngine::progressNotification, m_myViewObj, &SimpleView::displayProgress)
있습니다.
관리자 클래스의 디자인 측면에 대해 살펴 보지 않겠습니다. 그러나 이것이 신호 / 슬롯 시스템이 빛나는 곳이라고 말하면 충분합니다. 내 애플리케이션을위한 매우 깨끗한 아키텍처를 설계하는 데 집중할 수 있습니다. 항상 그런 것은 아니지만 종종 나는 단지 신호를 내고 슬롯을 구현 한다는 것을 알게 됩니다.
시그널 메서드 를 방출하지 않고 사용 / 호출 할 수 있다면 , 그것은 반드시 그 함수 가 처음에 시그널로 필요하지 않았 음 을 의미합니다 .
emit
필요하지 않습니다. 그것은 당신이에 대해 배운 이상한 생각의emit
신호 슬롯 시스템은 Qt는에 대해 알게되는 최초의 것들 중 하나이기 때문에, 직접 신호를 호출 한 후 오래.