Visual studio Can';t捕获来自QTcpServer的newConnection()信号
我试图在QT中创建一个简单的服务器线程来接受连接,但是尽管服务器正在侦听(我可以使用我的测试应用程序进行连接),但我无法获得要执行的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
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处理对象都位于同一个线程中。这种情况比较容易处理
我有一个非常简单的工作示例:
标题:
资料来源: