2014-02-09 93 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