qt qtcpserver 仅在主函数中创建时才起作用

qt qtcpserver is only working when it is created in main function

我刚刚写了一个简单的qtcpserver,差不多就是这个例子:

服务器基本上可以工作,但只有在主函数中创建时才会工作。

工作:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestServer server;

    return a.exec();
}

不工作(这段代码无论如何都不会像这样工作,只是为了告诉你我的意思):

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    classA cA;

    return a.exec();
}

classA::classA(QObject *parent) :
    QThread(parent)
{
    TestServer server;
}

当我在主函数中创建一个 class A 并在 A 中创建 tcpserver 时,尽管服务器本身已启动,但永远不会执行 incomingConnection() 函数。 我可以看到这一点,因为我从 A 的构造函数收到 "Server start at port ..." 消息:

TestServer::TestServer(QObject *parent):
    QTcpServer(parent)
{
    if (this->listen(QHostAddress::Any, 2323)) {
        qDebug() << "Server start at port: " << this->serverPort();
    } else {
        qDebug() << "Start failure";
    }
}

这意味着,我的主要功能现在拥有 class A 和 qtcpserver 功能。当客户端连接时,qtcpserver 函数再次创建一个新线程。 我想要做的是让线程接收到的消息在我的 class A 中。这就是为什么我想在 class A 中创建 qtcpserver 的原因。

有人对此有什么建议吗? 如何在 A 中创建服务器?

谢谢!

你需要让对象 server 成为 class classA 的成员,因为现在这个对象在创建后立即销毁(因为现在你在本地范围内创建)