2014-02-09 8 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; 

};

это сигалтон класс. вот мой слот, который является еще один классом signalton назван loginProcess имени слота в этом классе в getUserData(QString& userData)

в loginChecker.cpp Я пытаюсь соединить эти объявленные сигналы с getUserData(QString userData) слотом

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

здесь Я доступ к экземпляру класса loginProcess signalton который имеет Slot

этих два путями я пытаюсь соединить эти сигналы и слот, но ни один из них работает

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

это не бросает нет такой ошибку слота во время выполнения

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

это thworing этой ошибки cannot call member function 'void loginProcess::getUserData(const QString&)' without object во время компиляции

ответ

0

Поскольку ваш сигнал не имеют аргументов, которые вы не можете подключить его к слоту, который имеет некоторые.

А также мне кажется, что в первом случае вы должны попробовать 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

Смежные вопросы