GTK를 개발하다보면 당연히 시그널을 처리해야하는 경우가 발생할 것이다.
그 이유는 GUI에서 마우스나 키보드로 이벤트를 입력할 것인데, 그에 해당하는 출력을 주기 위해서는 어떠한 신호를 줘야하기 때문이다.
이때, 시그널을 처리함으로써, GTK는 좀 더 자유롭고 다양한 기능을 발휘한다고 생각한다.
이번 포스팅은 시그널에 대한 설명을 하고자 한다.
1 2 3 4 5 6 7 | gulong g_signal_connect( gpointer* object, const gchar* name, GCallback func, gpointer func_data ); | cs |
- gulong형 리턴값 : callback함수를 확인하기 위한 꼬리표. 따라서 시그널과 object에 대해 필요한 만큼의 많은 callback을 가질 수 있고, 그것들이 붙여져 있는 순서대로 각각 실행된다. 이때, 꼬리표는 우리가 리스트에서 callback을 제거할 수 있도록 도와준다.
- 첫번째 인자는 시그널을 발생시킬 widget.
- 두번째 인자는 잡아내고자 하는 시그널의 이름.
- 세번째 인자는 시그널이 탐지되었을 때 호출할 함수.
- 네번째 인자는 이 함수에 넘겨줄 정보.
1 2 3 4 5 | void callback_func( GtkWidget *widget, ... /* other signal arguments */ gpointer callback_data ); | cs |
- 첫번째 인자는 시그널을 발생시킨 widget을 향한 포인터.
- 마지막 인자는 g_signal_connect() 함수의 네번째 인자로 주어져 있는 정보에 대한 포인터.
1 2 3 4 5 6 7 | gulong g_signal_connect_swapped( gpointer* object, const gchar* name, GCallback func, gpointer* callback_data ); | cs |
- callback함수가 GTK object에 대한 포인터라는 단 하나의 인자를 이용한다는 점을 빼면 gtk_signal_connect()와 같다.
- 따라서 이때의 callback 함수는 다음과 같은 모양을 해야 할 것이다.
1 2 3 4 5 | void callback_func( gpointer callback_data, ... /* other signal arguments */ GtkWidget* widget); | cs |
- 따라서 callback 함수에 부가적인 데이터를 사용하려면 g_signal_swapped()가 아닌 g_signal_connect()를 사용해야 한다.
'컴퓨터 관련 > Linux || Unix' 카테고리의 다른 글
컴파일러(compiler)와 인터프리터(interpreter)의 차이점 / 컴파일러란? /인터프리터란? (0) | 2017.04.25 |
---|---|
GTK+ 버튼 클릭으로 콘솔에 문자열 출력 (0) | 2017.04.23 |
GTK+ 이벤트[2] g_signal_connect과 g_signal_connect_swapped 의 차이점 (0) | 2017.04.23 |
GTK+ 컨테이너 Widget [2] Scrollbar widget (0) | 2017.04.23 |
GTK+ 컨테이너 Widget [1] Paned Window Widget (0) | 2017.04.23 |
댓글