2010-03-19 2 views
-1

나는 다음과 같은 코드가 있습니다내 코드의 실수는 무엇입니까?

class myslot 
    { 

public: 
    Q_OBJECT 

    myslot() 
     { 

     } 
    ~myslot() 
     { 

     } 

    typedef enum Emycars{volvo,benz,tata}cars; 


public slots: 
void hellowslot(myslot::cars); 
    }; 

void myslot::hellowslot(myslot::cars cars1) 
    { 

    } 


class mysignal 
    { 
public: 
    Q_OBJECT 

public: 
     mysignal(myslot *ourslot) 
      { 

    bool val = QObject::connect(this,SIGNAL(hellowsignal(myslot::Emycars)),ourslot,SLOT(hellowslot(myslot::Emycars))); 
      } 
     ~mysignal() 
      { 

      } 

signals: 
void hellowsignal(myslot::Emycars); 


    }; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    myslot slot; 
    mysignal sig(&slot); 


    // DeleteNow w; 
    // w.showMaximized(); 
    return a.exec(); 
} 

내 코드에서 실수가 무엇입니까? 열거 형 권리를받는 함수에 대해 필자가 작성한 연결 방법이 맞습니까? 클래스는 QObject 상속해야 신호/슬롯기구를 사용하기 위해

답변

7

가 (직접 또는 QWidgetQObject의 하위부터) Q_OBJECT 매크로를 사용하여 같은 자신을 선언한다.

따라서 mysignalmyslot은 모두 QObject에서 상속해야합니다.

은 또한 당신이 당신의 클래스의 여는 중괄호 후 매크로 권리를 배치해야합니다,이 제공해야합니다 :

class myslot : public QObject 
{ 
    Q_OBJECT 
public: 
// .../... 
}; 

class mysignal : public QObject 
{ 
    Q_OBJECT 
public: 
// .../... 
}; 
0

당신은 신호/슬롯 연결에 문제가? 그렇다면, 어쩌면 당신은 수행해야합니다

bool val = QObject::connect(this, SIGNAL(hellowsignal(myslot::cars)), ourslot, SLOT(hellowslot(myslot::cars)));

당신이 myslot와 슬롯 :: 자동차를 선언 myslot하지 렸기 때문에 :: Emycars합니다. Metaobject 컴파일러는 단순히 슬롯과 관련된 문자열을 만듭니다. 즉, 연결이 작동하지 않는 이유입니다.

관련 문제