如题,我用的Qt 5编写的简单Demo。
代码如下
#include "servertest.h"
serverTest::serverTest(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
tcpServer = new QTcpServer(this);
if (!tcpServer->listen(QHostAddress::LocalHost, 12100))
{ //监听本地主机的6666端口,如果出错就输出错误信息,并关闭
qDebug() << tcpServer->errorString();
close();
}
//connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendMessage()));
//注意这里我注释掉的代码,如果是用这种方法连接,是可以进入断点1的。
因为我的程序中重新写了incomingConnection这个虚函数,但是有连接时不会调用断点2的程序。
求大神帮忙呀。我已经无能为力啦。
}
serverTest::~serverTest()
{
}
void serverTest::sendMessage()
{
qDebug() << "断点1";
}
void serverTest::incomingConnection(int s)
{
qDebug() << "断点2";
}
------解决方案--------------------
你这个incomingConection只是serverTest的成员,它既不是重写QTcpServer里的那个incomingConection,你也没有把它跟tcpServer里的某个信号相连,那它当然不会被调用啦
------解决方案--------------------
】
因为你这里并不是子类化QTcpServer,所以不能重写。所以你需要把你这里的incomingConection作为一个槽和QTcpServer里的相应信号相连
------解决方案--------------------
】
你这个incomingConection只是serverTest的成员,它既不是重写QTcpServer里的那个incomingConection,你也没有把它跟tcpServer里的某个信号相连,那它当然不会被调用啦
那怎么样才算是重写QTcpServer里的那个incomingConection
因为你这里并不是子类化QTcpServer,所以不能重写。所以你需要把你这里的incomingConection作为一个槽和QTcpServer里的相应信号相连
Server::Server(QObject *parent,int port) :
QTcpServer(parent)
{
listen(QHostAddress::Any,port);
}
void Server::incomingConnection(int socketDescriptor)
{
tcpClientSocket = new TcpClientSocket(this);
//connect(tcpClientSocket,SIGNAL(updateClients(QString)),this,SLOT(updateClients(QString)));
tcpClientSocket->setSocketDescriptor(socketDescriptor); //新创建的套接字描述符指定为参数socketDescriptor
tcpClientSocketList.append(tcpClientSocket);
}
我也有试过继承自QTcpServer 但是也是不行。不晓得是什么原因造成的
这样子可以啊,为什么不行?我一直都是这么做的。