QT

QT 사용법(SIGNAL과 SLOT)

원원 2017. 12. 27. 20:59



안녕하세요. 오늘은 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
만든 SIGNAL은 따로 구현은 안해도 됩니다.



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]


connect( SIGNAL이 발생하는 곳 , 발생SIGNAL , SLOT이 발생하는 곳, 발생SLOT)

이런식으로 사용하게 됩니다. 주의할 점은 발생하는 곳의 자료형이 포인터라는 것 입니다.


1
connect(this,SIGNAL(IamSignals()),this,SLOT(IamSlots()));
cs

여기에서는 SIGNAL과 SLOT과 connect를 한 클래스 내에서 사용했으므로 this를 사용한 모습입니다.



signalslot.zip

완성한 파일입니다.



사실 다른 방법으로도 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