Я tryng для подключения() сигнал в потоке 2 к слоту в главном потоке, у меня есть конструктор, как та, которая работает в потоке 2 в качестве дочернего класса от QThread:слоты и сигналы в QThread
InputHandler::InputHandler()
{
connect(this, SIGNAL(write(User*, Message)), TTCServer::ttcserver, SLOT(write(User*, Message)));
qDebug() << "new thread created!";
}
, но я получаю сообщение об ошибке во время выполнения
QObject::connect: No such signal QThread::write(User*, Message)
Мой inputhandler.h выглядит следующим образом:
#ifndef INPUTHANDLER_H
#define INPUTHANDLER_H
#include <QThread>
#include <QDebug>
#include <QString>
#include "message.h"
#include "data.h"
class InputHandler : public QThread
{
public:
InputHandler();
void run();
private:
Message message;
void login(User* user, QString login);
void sendLogins(User* user);
void startGameWith(User* user, QString opponentLogin);
signals:
void write(User* user, Message message);
};
#endif // INPUTHANDLER_H
И если это имеет значение, я ALS о inncluding ttcserver.h:
#ifndef TTCSERVER_H
#define TTCSERVER_H
#include <QTcpServer>
#include <QObject>
#include <QDebug>
#include "data.h"
#include "user.h"
#include "message.h"
#include "inputhandler.h"
class TTCServer : public QTcpServer
{
Q_OBJECT
public:
explicit TTCServer();
static TTCServer* ttcserver;
void run();
signals:
public slots:
void newConnection();
void write(User* user, Message message);
private:
QTcpServer* server;
Message* message;
void handleInputFrom(User* user);
};
#endif
// TTCSERVER_H
void write
метод определяемом в ttcserver.cpp вроде этого:
void TTCServer::write(User* user, Message message)
{
qDebug() << "Signal recieved!";
}
write(User*, Message)
Так почему в connect()
функции пытается быть QThread::write()
вместо InputHandler::write()
?
User
и Message
- классы, чтобы быть четкими.
Если вы используете Qt5, у них есть новый формат для 'connect()', который использует фактические адреса вместо макросов SIGNAL и SLOT. Возможно, это будет более предсказуемо для вас. http://doc.qt.io/qt-5/signalsandslots.html – infixed
Я использую Qt5.8, мне не нужно было менять код, потому что новый Qt обратный совместим, но в любом случае это приятная функция, которую вы показал здесь. – Ginko
http://stackoverflow.com/questions/26422154/my-signal-slot-connection-does-not-work/26422155#26422155 – Silicomancer