2014-02-09 134 views
0

我正嘗試連接兩個插槽並打開信號。這裏是我的頭文件,我已經定義了我的信號將一個信號連接到多個插槽qt

class loginChecker : public QObject 
{ 
Q_OBJECT 

public: 
static loginChecker *instance(void); 
signals: 
void loginid(); 
void loginemail(); 

private: 
loginChecker(void) {} 
~loginChecker(void) {} 

private: 
static loginChecker *s_instance; 

};

它是sigalton類。這裏是我的插槽,在loginChecker.cpp 命名爲loginProcess 插槽名稱在這個類中getUserData(QString& userData)

我想這些聲明的信號,getUserData(QString userData)插槽

loginProcess *lp; 
    lp = loginProcess::instance(); 

這裏連接另一個signalton類我正在訪問loginProcess信號類的實例有插槽

這些是兩種方法我試圖連接這些信號和插槽,但沒有工作

 QObject::connect(s_instance, SIGNAL(loginid()), es, SLOT(getUserData(userid))); 

這在運行時拋出了沒有這樣的插槽錯誤

`QObject::connect(s_instance, &esCoreAuthenticator::loginid, es, &loginProcess::getUserData(uid));` 

這是在編譯時

回答

0

thworing此錯誤cannot call member function 'void loginProcess::getUserData(const QString&)' without object由於你的信號沒有參數,你無法將其連接到插槽,具有一些。

而且也是在我看來,在第一種情況下,你應該嘗試SLOT(getUserData(QString&))和在第二種情況下只是&loginProcess::getUserData無任何括號。

+0

感謝看起來像第二個工作,但我不明白如何getUserData將獲得user_id的值,如果我不通過它的參數... – user3290805

+0

@ user3290805傳遞它在你的信號:'信號: void loginid(const QString &id);''然後你發出它,就像'emit loginid(user_id)'或者你爲'user_id'使用的任何東西一樣,你也可以使用['QSignalMapper'](http://qt-project.org/ doc/qt-5.0/qtcore/qsignalmapper.html) – thuga

+0

是的,我的建議是不是將它從插槽中刪除,而是將它添加到信號,如果你需要通過它。 – Predelnik