안녕하세요..
이번엔 Signal & Slot 입니다.
Signal & Slot이란.. 간단하게 말하면..
이벤트를 말하는겁니다.
WPF를 예로 들면.... Button_Click 이벤트를 받아서 특정 함수를
실행시키는 그런 기능을 실행하기 위해
Signal & Slot이 사용되는것이죠..!!
일단 당당하게 프로젝트 생성!
그후 Form의 ui를 더블클릭하여 QTDesigner 실행..!
그리고 간단하게 버튼을 누르면 Label의 Text가 Hello로 변경되도록 할꺼기에
버튼 하나와 Label 하나를 추가해줍니다.
그 후 Label 이름 수정!!! ( 지난번엔 안했죠.. 하지만 항상 해줘야 하는 변수 작명기술.....제일어려워...)
사진과 같이 Label 변경했으면 Button 이름도 변경..!!
그리고 QTDesigner 종료..!!
그리고 해줘야하는 것!!! 꼭 빌드!!!!! 그래야 code단에서 추가한 UI 컴포넌트를 사용가능..!!
그 후 qtsingalnslot.cpp 더블클릭
이제 여기서 아까 추가한 pushbutton 컴포넌트와 함수를 연결해주면됩니다.
연결해주는 함수는 바로 connect 함수.. 말그대로 연결...
아래와 같이 작성해줍니다.
inline bool QObject::connect(const QObject *asender, const char *asignal,
const char *amember, Qt::ConnectionType atype)
간단히 connect 말씀드리면..
첫번째 인자는 이벤트를 받을 Object.. 여기서는 버튼이므로 ui.pbHello가 된거겠죠..?
두번째 인자는 어떠한 이벤트인지.. click인지 doubleclick인지 mouseover인지.. 등등..
SIGNAL의 종류는 인터넷이나 설치된 QT의 Document를 보시면 해당 Class에서 사용가능한 Signal이 정리되어 있습니다.!
세번째 인자는 click이든 doubleclick이든의 이벤트를 받아서 수정될 위치..저희는 그냥 this를 써서 폼에 해당하는 모든 컴포넌트를 수정할수있도록되어있는데 만약 새로운 폼이 있다면 새로운 폼의 정보를 적어주면됩니다. ( 당연히 저희는 label변경이므로 ui.lbHello로 해도 됩니다. )
네번째 인자는 slot.. 이것이 어떤 함수를 실행할 것인지 정하는 부분... 저는 SlotHelloFunction이라고 지정했으므로 아래쪽에 SlotHelloFunction함수를 추가로 작성하였습니다.
이렇게 connect를 하면 끝..
실행하면
끝!!!
근데 간단한 connect같은경우에는 ui, 즉 QTDesigner 쪽에서도 해줄수 있다.
QTDesinger를 실행 한 후 버튼을 클릭하면 오른쪽 하단에 Signal/슬롯 편집기 라는 것이 있다..
여기서 + 키를 누른 후 간단하게 설정해주면.. 실행된다.
오른쪽 아래와 같이 간단하게 설정해줄수도 있다.