안녕하세요. 오늘은 SIGNAL과 SLOT에 대해 알아보겠습니다.
QT에는 signal과 slot라는게 있습니다. signal이 발생하면 slot이벤트가 발생합니다.
예)
버튼을 클릭하면 A함수가 실행된다. (SIGNAL : 클릭 , SLOT : A함수)
TCP/IP통신에서 입력받을 데이터가있으면 A함수가 실행된다. (SIGNAL : 입력받을 데이터, SLOT : A함수)
키보드에서 키를 입력하면 라벨이 움직인다. (SIGNAL : 키보드에서 키 입력, SLOT : 라벨움직임)
이런식으로 SIGNAL은 이미 만들어진걸 사용할 수도 있고 사용자가 만들 수도 있습니다.
출처: http://wowon.tistory.com/133 [원원이의 블로그]
사용 방법
1. SIGNAL만들기
2. SLOT만들기
3. SIGNAL과 SLOT연결하기 (connect함수)
1. SIGNAL만들기
SIGNAL을 만들려면 class의 signals한정자 안에 SIGNAL을 선언하면 됩니다.
1 2 | signals: void IamSignals(); | cs |
2. SLOT만들기
1 2 | private slots: void IamSlots(); | cs |
slot도 똑같은 방법으로 만들어주면 됩니다.
그러나 SLOT은 구현을 해야합니다.
1 2 3 | void MainWindow :: IamSlots(){ qDebug()<< "슬롯 실행"; } | cs |
구현은 함수를 구현하는 식으로 똑같이 하면 됩니다.
3. SIGNAL과 SLOT연결하기 (connect함수)
QMetaObject::Connection QObject::connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection) [static]
이런식으로 사용하게 됩니다. 주의할 점은 발생하는 곳의 자료형이 포인터라는 것 입니다.
1 | connect(this,SIGNAL(IamSignals()),this,SLOT(IamSlots())); | cs |
여기에서는 SIGNAL과 SLOT과 connect를 한 클래스 내에서 사용했으므로 this를 사용한 모습입니다.
완성한 파일입니다.
사실 다른 방법으로도 SIGNAL과 SLOT을 이용 할 수 있습니다.
다양한 클래스에서 이미 SIGNAL과 SLOT가 정의되어 있습니다.
예)
소켓통신에서 사용 할 수 있는 SIGNAL입니다.
1 | void QIODevice::readyRead() [signal] | cs |
서버와 클라이언트가 연결되고, 데이터교환을 할때 수신측에서 사용하는 시그널인데 데이터를 읽을 준비가 되었다는 SIGNAL입니다.
'기타지식들 > QT' 카테고리의 다른 글
QT사용법(라벨,버튼,qDebug() ) (1) | 2017.12.27 |
---|---|
QT 사용법(프로젝트만들기,Hello World) (0) | 2017.12.27 |