QObject :: connect не может подключить сигнал к слоту * this * объекта - PullRequest
0 голосов
/ 08 октября 2018

Название может быть трудно понять, извините за это.

У меня проблема с подключением к слоту.Нет ошибок компиляции, но connect возвращает false.В консоли напечатана строка ошибки:

QObject::connect: No such slot QObject::clientConnected_() in ../server/server.cpp:8

Мне кажется, проблема в том, что connect не видит слот clientConnected_ () в классе Server.Или, может быть, ищет его в классе QObject по какой-то причине.

Код выглядит следующим образом:

server.h

#ifndef SERVER_H
#define SERVER_H

#include <QtNetwork>
#include <QTcpServer>
#include <QObject>

class Server : public QObject
{
    Q_OBJECT
public:
    bool startListening(const quint16 port);
public slots:
    static void clientConnected_();
private:
    QTcpServer * server_;
};

#endif // SERVER_H

server.cpp

#include "server.h"

#include <iostream>

bool Server::startListening(const quint16 port)
{
    server_ = new QTcpServer();
    QObject::connect(server_,SIGNAL(newConnection()),this,SLOT(clientConnected_()));
    return server_->listen(QHostAddress::Any,port);
}

void Server::clientConnected_()
{
    std::cout << "Connection established!" << std::endl;
    return;
}

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Как уже упоминалось, вам следует объявить ваш void clientConnected_ () нестатичным (вы не можете подключиться к статическому члену, но при желании вы можете вызвать статический метод из своего слота).А также вы должны объявить слоты в разделе «слоты», чтобы MOC мог анализировать ваши слоты.

Более подробную информацию вы можете найти здесь http://doc.qt.io/qt-5/signalsandslots.html

0 голосов
/ 09 октября 2018

static void clientConnected _ ();

изменить на

частные слоты: void clientConnected _ ();

...