2010-01-05 4 views
0

방금 ​​QT로 시작했고 신호/슬롯의 개념을 알고 있지만 구현시 문제가 있습니다.QT에서 슬롯에 신호를 바인딩 할 수 없습니다

#include "test.h" 
#include <QCoreApplication> 
test::test() 
{ 
    // TODO Auto-generated constructor stub 

} 

test::~test() 
{ 
    // TODO Auto-generated destructor stub 
} 



void test::fireslot(){ 

    qDebug("the slot fired"); 

} 

void test::dosignaling(){ 
    QObject::connect(this,SIGNAL(callslot()),this,SLOT(fireslot())); 

} 

참고 : 내 코드를 살펴 여기에 내가 Q_OBJECT 매크로를 추가했고 test.h

에 QObject를 상속하고 나의 테스트 컨테이너

#include "test.h" 
int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    //test t1(); 
    test *t2 = new test(); 


    t2->dosignaling(); 


    return a.exec(); 
} 

코드 완벽하게 컴파일하지만 아무 일도 일어나지 않을 것입니다. 나는 실수로 어떤 부분을 잘 모르겠다. -?

답변

5

void test::dosignaling에있는 코드는 신호 "callslot"에 슬롯 "fireslot"을 연결하지만callslot 신호를 방출하면 어디에 있는가?

당신은 당신의 코드를 변경하고 생성자 (또는 다른 곳)에 QObject::connect()를 배치하고 당신의 dosignaling 방법을 변경해야합니다 또한

void test::dosignaling() 
{ 
    emit callslot(); 
} 

, 당신은 헤더 파일을 표시하지 않은하지만이 포함되어야한다 다음과 같이 호출 슬롯 신호를 선언하십시오.

class test 
{ 
    ... 
signals: 
    void callslot(); 
}; 
+1

그리고 슬롯에 다음을 추가하십시오. void fireslot(); –

+1

그래, 나는 그가 이미 그랬다고 생각했다. 그곳에는 fireslot –

관련 문제