구리의 창고

QT Programming - 시그날 통과, 전달 시키기 본문

QT

QT Programming - 시그날 통과, 전달 시키기

구리z 2011. 11. 16. 16:04
QT에 있는 SIGNAL SLOT을 쓰다보면 !! signal을 다른 개체로 통과시켜야 하는 경우가 있다.

아래와 같이 다이얼로그 위에 버튼이 있고 엔터를 치면 clicked() 시그날이 발생한다고 하자.


그렇다면 버튼이 발생시키는 시그날은 사실상 다이얼로그 밖에 알 수 없다.

이 때 발생한 시그날을 다른 슬롯에 연결하기 위해선 적절히 QObject::connect를 해줘야한다.


처음 생각한 방법은  


Dialog.cpp
QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(passClicked()));
void Dialog::passClicked()
{
	emit pushClicked();
}


Controller.cpp
QObject::connect(dialog, SIGNAL(pushClicked()), this, SLOT(showMessage()));
void Controller::showMessage()
{
	QMessageBox::warning(this, "title", "helloworld");
}

이런 구조였다... 함수를 한 번더 거쳐서 시그날을 발생시키는 상당히 귀찮은 작업이다. 하지만 검색하다보니 아래와같이 간단한 방법을 알아냈다.

Dialog.cpp
QObject::connect(pushButton, SIGNAL(clicked()), this, SIGNAL(pushClicked()));


보통 SLOT이라고 생각되는 부분에 SIGNAL을 써주면 작동하는 것이다.
Comments