2010-03-19 117 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(); 
} 

什麼是我的代碼中的錯誤?我寫的方式是爲接收枚舉權的函數連接嗎?

回答

7

爲了使用信號/槽機構中的類必須從QObject繼承(直接或從QObject子類等QWidget使用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)));

becouse你聲明的myslot您的插槽::汽車,而不是myslot :: Emycars。 Metaobject編譯器只是創建與您的插槽相關的字符串,這就是爲什麼您的連接可能無法正常工作。