码迷,mamicode.com
首页 > 其他好文 > 详细

QT5.3无法自动调用incomingConnection函数的问题(4.7没有这个问题)

时间:2016-10-28 22:58:22      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:ext   copy   amp   log   dem   .com   idg   qt5   read   

最近将qt4.7的一个工程移到5.3,遇到了几个麻烦事,主要是这个incomingConnection监听后无法自动调用的问题,在4.7上是完全没有问题的,到了5.3就不行,网上也查了下,网友们都是放出问题,然而都没有写出解决。

1.一步解决

我之前是这样写的:

技术分享
void TFTPxServer::incomingConnection(int socketDescriptor)
{
    qDebug() << "incomingConnection...";

    TFTPxThread *thread = new TFTPxThread(socketDescriptor);
    //deleteLater会释放线程
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));

    thread->start();
}

int TFTPxServer::startListen()//通过调用这个函数达到自动进入incomingConnection开启新线程,然而在QT5.3这并没有什么卵用。
{
    if(!this->listen(QHostAddress::Any, TFTPX_PORT))
    {
        m_strErrMsg = QString("TFTPxServer Listen Fail.");
        return T_SOCKET_LISTEN_FAIL;
    }

    qDebug() << "listen success.";

    return T_SUCCESS;
}
技术分享

后来我尝试了下不用内部函数去监听,而是用TFTPxServer的对象直接监听,把上面的startListen()干掉,外部直接这样就可以了:

技术分享
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    serverInit();
}
技术分享
技术分享
int MainWindow::serverInit()
{
    m_server = new TFTPxServer(this);

    if(!m_server->listen(QHostAddress::Any, TFTPX_PORT))
    {
        ui->TextBrowseServerStatus->append("后台服务器已启动,监听失败!!!");
        return T_SOCKET_LISTEN_FAIL;
    }
  return T_SUCCESS;
}
技术分享

 大家也可以参考自带的demo:C:\Qt\Qt5.3.2\Examples\Qt-5.3\network\threadedfortuneserver可以查看下

http://www.cnblogs.com/luoxiang/p/4730215.html

 

QT5.3无法自动调用incomingConnection函数的问题(4.7没有这个问题)

标签:ext   copy   amp   log   dem   .com   idg   qt5   read   

原文地址:http://www.cnblogs.com/findumars/p/6009478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!