[질문] Qt프로그래밍 질문입니다.
글쓴이: horse76 / 작성시간: 목, 2004/04/01 - 11:47오전
<client.h>
...
....
signal:
void kk(); //선언 userdefine 함수
...
...
<view.cpp>
void jj()
{
..
connect(client, SIGNAL(kk()), this, SLOT(kk()));
..
}
void kk() //구현
{
}
많은 클래스 들이 있습니다 ....그중client.h에 signal에 kk();라는 함수가 정의만되어있습니다. 그리고 사용하는 부분 view.cpp에는 kk함수가 구현되어 있고 signal인 kk가 clieck같이 버튼같은 것을 눌렀을때 발생하는 시그널이 아닙니다. 그런데 위와같이 kk 시그널이 발생했을때 kk처리함수로 처리하라는 의미는 무엇인지 궁금합니다. 그리고 서로 다른 클래스에 정의되고 구현되어있는데 왜그런 것인지 설명좀 부탁드립니다.
Forums:
Re: [질문] Qt프로그래밍 질문입니다.
다른 소스를 참고하시는데 저런 부분이 나왔는데, 이해가 안간다는 말씀이신가요? 그렇다고 이해하고 답변을 드립니다.
signal이라는걸 사용하실려면 단지 class header 파일에 선언만 해주시면 됩니다. signal 로 선언된 함수의 실제 구현부분은 moc 를 통해 나온 파일에 구현되어있습니다.
signal이라는게 단지 메세지를 던지기 위한것이기에 signal이란 메세지를 던지는 행위 자체는 굳이 사용자가 구현할 필요가 없습니다. signal 의 argument와 prototype만 선언해주면 필요한 코드는 moc가 다 생성해줍니다.
구현 해야할것은 signal이 아니라, 해당 시그널이 발생했을 때 연결시킬 slot이 되겠죠. client.h 의 class 선언안에 signal로 선언된 kk는 시그널로서의 kk이고, slot으로서의 kk는 다른 함수입니다.
connect 할때도 argument를 보면,
connect(client, SIGNAL(kk()), this, SLOT(kk()));
첫번째 인자와 두번째가 묶이고, 두번째와 세번째가 묶입니다.
첫번째인자의 멤버인 두번째 인자 시그널이 발생 되면,
세번째 인자의 멤버인 네번째 슬롯이 호출된다고 생각하시면 됩니다.
client->kk(), 와 this->kk() 라고 보면 더 직관적입니다.
:D kde.or.kr 에도 qt 질/답 게시판이 있습니다만,
답변 주실분은 많은데, qt질문 해주시는 분들이 안계시네요.
댓글 달기