本人近期在线程中使用QTcpServer发现无法进入QTcpServer::incomingConnection(qintptr)函数,也接收不到newConnection()信号。现将代码展示如下:
首先,声明TestThread类:
#pragma once
#include <QThread>
#include <QTcpServer>
class TestThread : public QThread
{
    Q_OBJECT
public:
    TestThread(QObject *parent);
    ~TestThread();
    void    stop();
protected:
    void    run();
private slots:
    void    slotNewConnection();
private:
    QTcpServer*        m_pTcpServer;
    bool            m_bActive;
    bool            m_bStop;
};
该类的实现如下:
#include "testthread.h"
#include <QDebug>
TestThread::TestThread(QObject *parent)
    : QThread(parent), m_pTcpServer(0), m_bActive(false), m_bStop(false)
{
}
TestThread::~TestThread()
{
    stop();
}
void    TestThread::stop()
{
    while (m_bActive)
    {
        m_bStop = true;
        wait(200);
    }
}
void    TestThread::run()
{
    m_bStop = false;
    m_bActive = false;
    if (!m_pTcpServer)
    {
        m_pTcpServer = new QTcpServer();
        QObject::connect(m_pTcpServer, SIGNAL(newConnection()),
            this, SLOT(slotNewConnection()));
    }
    while (1)
    {
        if (m_bStop)
        {
            break;
        }
        m_bActive = true;
        if (m_pTcpServer && !m_pTcpServer->isListening())
        {
            m_pTcpServer->listen(QHostAddress::Any, 2404);
        }
        //Do something
        msleep(500);
    }
    if (m_pTcpServer)
    {
        delete m_pTcpServer;
        m_pTcpServer = 0;
    }
    m_bStop = false;
    m_bActive = false;
}
void    TestThread::slotNewConnection()
{
    qDebug() << __FUNCTION__ << ": New Connection";
}
在主窗口放置两个按钮,启动线程和停止线程:
void    XTest::slotStart()
{
    if (!m_Thread)
        m_Thread = new TestThread(this);
    if (m_Thread)
        m_Thread->start();
}
void    XTest::slotStop()
{
    if (m_Thread)
        m_Thread->stop();
}
发现当客户端连接时,进入不了TestThread::slotNewConnection()。请大师帮忙指点一下,究竟是我的代码问题,还是QTcpServer的Bug(不能在线程中创建和起动监听)?