当前位置: 代码迷 >> QT开发 >> Qt 五编写网络通信程序,incomingConnection这个函数调用不了
  详细解决方案

Qt 五编写网络通信程序,incomingConnection这个函数调用不了

热度:126   发布时间:2016-04-25 03:15:19.0
Qt 5编写网络通信程序,incomingConnection这个函数调用不了
本帖最后由 lvyato 于 2014-08-03 11:26:52 编辑
如题,我用的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里的某个信号相连,那它当然不会被调用啦
------解决方案--------------------
引用:
Quote: 引用:

你这个incomingConection只是serverTest的成员,它既不是重写QTcpServer里的那个incomingConection,你也没有把它跟tcpServer里的某个信号相连,那它当然不会被调用啦


那怎么样才算是重写QTcpServer里的那个incomingConection


因为你这里并不是子类化QTcpServer,所以不能重写。所以你需要把你这里的incomingConection作为一个槽和QTcpServer里的相应信号相连
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

你这个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   但是也是不行。不晓得是什么原因造成的


这样子可以啊,为什么不行?我一直都是这么做的。