Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Can';t捕获来自QTcpServer的newConnection()信号_Visual Studio_Qt - Fatal编程技术网

Visual studio Can';t捕获来自QTcpServer的newConnection()信号

Visual studio Can';t捕获来自QTcpServer的newConnection()信号,visual-studio,qt,Visual Studio,Qt,我试图在QT中创建一个简单的服务器线程来接受连接,但是尽管服务器正在侦听(我可以使用我的测试应用程序进行连接),但我无法获得要执行的newConnection()信号 任何关于我在这里缺少什么的帮助都将不胜感激 class CServerThread : public QThread { Q_OBJECT protected: void run(); private: QTcpServer* server; public slots: void AcceptC

我试图在QT中创建一个简单的服务器线程来接受连接,但是尽管服务器正在侦听(我可以使用我的测试应用程序进行连接),但我无法获得要执行的newConnection()信号

任何关于我在这里缺少什么的帮助都将不胜感激


class CServerThread : public QThread
{
   Q_OBJECT

protected:
   void run();

private:
   QTcpServer*  server;

public slots:
   void  AcceptConnection();
};


void CServerThread::run()
{
   server = new QTcpServer;

   QObject::connect(server, SIGNAL(newConnection()), this, SLOT(AcceptConnection()));

   server->listen(QHostAddress::Any, 1000); // Any port in a storm

   exec(); // Start event loop
}


void CServerThread::AcceptConnection()
{
   OutputDebugStringA("\n***** INCOMING CONNECTION"); // This is never called!
}

首先,我可以说您的服务器位于新线程中,而CServerThread实例位于另一个线程中(在创建该实例的线程中)。您正在创建的信号/插槽连接是inderect,并在两个不同线程的事件循环之间使用线程保存事件传递。若创建CServerThread的线程并没有运行Qt事件循环,实际上可能会导致这样的问题

我建议您创建一些MyServer类,它创建qtcserver并调用listen,并将qtcserver::newConnection()信号连接到自己的插槽。然后将服务器线程运行方法重写为以下内容:

void CServerThread::run() {
   server = new MyServer(host,port);
   exec(); // Start event loop
}
在这种方法中,QTcpServer和newConnection处理对象都位于同一个线程中。这种情况比较容易处理

我有一个非常简单的工作示例:

标题:

资料来源: