QT 튜토리얼 7,8에 나오는 connect에 대한 질문.
글쓴이: hanseok / 작성시간: 수, 2005/11/16 - 9:24오전
connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) ); connect( slider, SIGNAL(valueChanged(int)), SIGNAL(valueChanged(int)) );
7,8 장에 이런 구문이 나옵니다.
이것중..
두번째 나오는것에 대해서 이해가 잘 되지 않습니다.
slider의 값이 바뀌면 시그널을 발생시키고
그 시그널에 의하여 동일 시그널을 또 발생시킨다면 //무한루프가 아닌지?
시그널이 수행되지 않은 상태에서 동일 시그널이 발생하면 무시한다면..~~ // ..
이해가 계속 안되네요..
설명 부탁드리겠습니다.
Forums:
세번째 인자 this가 빠졌네요slider에 시그널이 발생하면LC
세번째 인자 this가 빠졌네요
slider에 시그널이 발생하면
LCDRange에도 시그널을 발생시키는 건데요
두 번째 문장은 좀 잘못 쓰셨군요.[code:1]connect(
두 번째 문장은 좀 잘못 쓰셨군요.
slider와 this가 서로 다른 개체이고 따라서 동일한 시그널이 아니므로 무한 루프에
빠지지 않습니다. 만약 다음처럼 한다면 무한 루프에 빠지겠죠.
이것과 main.cpp의 MyWidget 생성자 내에서의 connect()가 어떻게 연동이
되는지 잘 따져보세요.
[code:1]#ifndef LCDRANGE_H#define LC
위의 코드에서 보시면.
connect( slider, SIGNAL(valueChanged(int)),
lcd, SLOT(display(int)) );
connect( slider, SIGNAL(valueChanged(int)),
SIGNAL(valueChanged(int)) );
이와 같은 코드에서
this가 생략된것은 이해 했습니다.
두번째 connect 가 호출하는(?) valueChanged(int) <== 이것은 무엇을 호출하게 되는것인가요?
slider에서 값이 바뀌게 되면 LCDRange의 valueChanged(int)를 호출하게 되는데
signals:
void valueChanged(int);
선언만 되어 있고 구현된 부분은 없습니다.
잠이 들어야지만 꿈을 꿀수 있는것인가?
우리는 항상 꿈을 쫓아 가며 살아가는 사람들..
[quote="hanseok"]두번째 connect 가 호출하는(?) v
MOC(meta-object compiler)가 만들어 줍니다. 빌드하고 나면 moc_*.cpp가
생기는데 그 안에 들어 있습니다.
여담이지만 Qt의 MOC는 type-safe 하지 않다는 문제가 있습니다. 예를 들어
다음과 같이 바꾸고 빌드하면 경고 하나 없이 깨끗이 빌드되지만 제대로 동작하지
않습니다. 디버거로 실행하면 그런 시그널이 없다는 메시지가 뜨긴 하지만요.
문자열로 콜백 함수 테이블을 매핑하기 때문인 듯 합니다. 그래서 connect()를 쓸
때는 함수 타입이 맞는지 주의해야 하지요.
[quote="doldori"]MOC(meta-object compi
음.. qmake 로만 해서.~ mod 라는것이 있는것은 알았지만 고민을 해보지 않았네요.~
감사합니다. ~
한가지는 해결했지만 아직 SIGNAL과 SLOT 에 대해서
무엇인가 찜찜한 기분이~ 가시지 않네요..
잠이 들어야지만 꿈을 꿀수 있는것인가?
우리는 항상 꿈을 쫓아 가며 살아가는 사람들..
명확한 답을 가지고.~~ 쩝.. ..
쩝. 이곳에서 첫번째 connect 는 slider에서 발생하는 이벤트..
를. display에 연결
두번째는 slider에서 발새한 이벤트를 LCDRange와 관련된 것을 호출한다.
깔끔.. 이해..
잠이 들어야지만 꿈을 꿀수 있는것인가?
우리는 항상 꿈을 쫓아 가며 살아가는 사람들..
댓글 달기