【发布时间】:2018-10-08 20:54:10
【问题描述】:
标题可能难以理解,抱歉。
我的插槽连接信号有问题。没有编译错误,但连接返回 false。 控制台打印错误行:
QObject::connect: No such slot QObject::clientConnected_() in ../server/server.cpp:8
我认为问题在于连接在类 Server 中看不到插槽 clientConnected_()。或者可能出于某种原因在类 QObject 中寻找它。
代码如下:
服务器.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
服务器.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;
}
有什么想法吗?
【问题讨论】:
-
我已经测试了你的代码,我只是添加了一个构造函数,编译没有问题,请提供minimal reproducible example
-
使用新样式连接:
connect(server_, &QTcpServer::newConnection, this, &Server::clientConnected_);。旧的连接方式的问题是它不会在编译时告诉你它是否已经连接,它只是在运行时对你大喊大叫,所以建议使用新的语法。 `
标签: c++ qt qt-signals qobject qt-slot