이 전 메뉴바 만들기에서 시그널과 슬롯을 사용해 보았습니다.

슬롯은 시그널과 연결될 수 있고 시그널과 연결된 슬롯은 해당 시그널이 발생될 때마다 자동으로 호출됩니다.

시그널/슬롯 매커니즘은 QObject에 구현되어 있으 QObject를 상속받는 클래스라면 어디에서든 사용이 가능합니다.


connect(sender, SIGNAL(signal), receiver, SLOT(slot));


sender와 receiver는 QObject에 대한 포인터이며 signal과 slot은 매개변수의 이름이 생략된 함수 시그너처 입니다.

SIGNAL()과 SLOT() 매크로는 자신의 인자를 문자열로 변환하는 역할을 담당합니다.



기본적으로 시그널과 슬롯은 아래와 같이 연결될 수 있습니다.


- 하나의 시그널이 여러 개의 슬롯에 연결될 수 있다.

connect(sender, SIGNAL(signal), receiver, SLOT(slot1));

connect(sender, SIGNAL(signal), receiver, SLOT(slot2));


- 여러 개의 시그널이 하나의 슬롯에 연결될 수 있다.

connect(sender, SIGNAL(signal1), receiver, SLOT(slot));

connect(sender, SIGNAL(signal2), receiver, SLOT(slot));


- 시그널은 또 다른 시그널에 연결될 수 있다.

connect(sender, SIGNAL(signal), receiver, SIGNAL(signal));

- 기존에 설정된 연결은 해제될 수 있다. ( Qt는 객체가 삭제될 때 그 객체가 갖고 있던 모든 연결을 해제합니다. )

disconnect(sender, SIGNAL(signal), receiver, SLOT(slot));

또한, 시그널과 슬롯이 정상적으로 연결되려면 매개변수 타입과 순서가 동일해야 합니다.

connect(sender, SIGNAL(signal_test(int, const QString &)), receiver, SLOT(slot_test(int, const QString &));

하지만 시그널이 슬롯보다 더 많은 매개변수를 갖는 경우에는 예외적으로 연결되 가능하며, 시그널이 갖는 추가적인 매개변수는 무시 됩니다.

connect(sender, SIGNAL(signal_test(int, const QString &)), receiver, SLOT(slot_test(int));




+ Recent posts