qt:signalsandslots
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
qt:signalsandslots [2014/02/19 06:09] – 새로 만듦 changwoo | qt:signalsandslots [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Signals & Slots ====== | ====== Signals & Slots ====== | ||
+ | ===== 설명 ===== | ||
레퍼런스: | 레퍼런스: | ||
줄 9: | 줄 10: | ||
여기서 시그널과 슬롯을 선언한다고만 해서 무조건 두 객체간에 통신이 이뤄지는 것은 아니다. 둘을 명시적으로 엮어 주어야 시그널의 메시지가 슬롯으로 전달된다. 이 역할을 하는 것이 '' | 여기서 시그널과 슬롯을 선언한다고만 해서 무조건 두 객체간에 통신이 이뤄지는 것은 아니다. 둘을 명시적으로 엮어 주어야 시그널의 메시지가 슬롯으로 전달된다. 이 역할을 하는 것이 '' | ||
+ | ===== SIGNAL(), SLOT() 매크로 ===== | ||
connect() 함수의 슬롯 인자로는 함수 포인터도 가능하지만, | connect() 함수의 슬롯 인자로는 함수 포인터도 가능하지만, | ||
connect(sender, | connect(sender, | ||
줄 15: | 줄 17: | ||
이 때 SIGNAL의 인자 개수가 SLOT의 인자 개수보다 적어서는 안 된다. 런타임 에러가 날 것이다. | 이 때 SIGNAL의 인자 개수가 SLOT의 인자 개수보다 적어서는 안 된다. 런타임 에러가 날 것이다. | ||
+ | ===== 객체 시그널 매핑 ===== | ||
어떤 객체의 시그널을 특정한 객체와 매핑하는 방법이 있다. '' | 어떤 객체의 시그널을 특정한 객체와 매핑하는 방법이 있다. '' | ||
<code cpp> | <code cpp> | ||
줄 35: | 줄 38: | ||
</ | </ | ||
+ | ===== 자동 시그널 연결 ===== | ||
+ | [[http:// | ||
+ | uic에 의해 특정 이름을 가진 슬롯은 자동으로 시그널과 연결이 된다. 다음 규칙을 보자. | ||
+ | void on_< | ||
+ | | ||
+ | 일례로 '' | ||
+ | '' | ||
+ | ===== 예제: signal_emitter, | ||
+ | [[.: | ||
+ | |||
+ | 우선 signal_emitter에 시그널을 추가한다. | ||
+ | <code cpp> | ||
+ | void send(const int); | ||
+ | </code cpp> | ||
+ | |||
+ | signal_receiver 클래스를 만든다. 물론 QObject를 상속 받아야 한다. 그리고 다음 함수를 슬롯으로 등록한다. | ||
+ | <code cpp> | ||
+ | void receive(const int value); | ||
+ | |||
+ | void signal_receiver:: | ||
+ | { | ||
+ | std::cout << " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | main 함수에서 시그널과 슬롯을 연결한다. | ||
+ | <code cpp> | ||
+ | // it is assigned at stack. You must declare after the parent. | ||
+ | signal_receiver receiver(& | ||
+ | |||
+ | // emitter-receiver connection | ||
+ | QObject:: | ||
+ | & | ||
+ | </ | ||
+ | |||
+ | signal_emitter의 launch() 함수에 시그널을 보내는 코드를 추가한다. | ||
+ | <code cpp> | ||
+ | for(int i = 0; i < 10; ++i) { | ||
+ | emit send(i); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 결과 | ||
+ | < | ||
+ | Hello, world! | ||
+ | received: 0 | ||
+ | received: 1 | ||
+ | received: 2 | ||
+ | received: 3 | ||
+ | received: 4 | ||
+ | received: 5 | ||
+ | received: 6 | ||
+ | received: 7 | ||
+ | received: 8 | ||
+ | received: 9 | ||
+ | </ | ||
+ | 변경된 소스는 {{: | ||
+ | |||
+ | ===== 시그널은 오버로딩 가능할까? | ||
+ | 출처: http:// | ||
+ | |||
+ | 우격다짐으로 가능한 것 같아 보이지만, |
qt/signalsandslots.1392790182.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)