Qt - 当一个类中有多个 QTcpSocket 时,我如何知道哪个 QTcpSocket 发出了 readyRead 信号?

Posted

技术标签:

【中文标题】Qt - 当一个类中有多个 QTcpSocket 时,我如何知道哪个 QTcpSocket 发出了 readyRead 信号?【英文标题】:Qt - How do I know which QTcpSocket emitted readyRead signal when there are several QTcpSocket in a class? 【发布时间】:2013-07-03 12:36:50 【问题描述】:
class SocketContainer 
private:
    QTcpSocket* m_sockets[10];
public:
    SocketContainer() 
        for(int i = 0; i < 10; i++)
            connect(m_sockets[i], SIGNAL(readyRead()), this, SLOT(onNewData()));
    
private slots:
    onNewData();

我如何知道onNewData() 中哪个套接字发出了readyRead

【问题讨论】:

相信你可以使用QObject::sender函数。 【参考方案1】:

您可以按照 Kourosh 的建议使用 sender,或者 QSignalMapper 更适合您的需求。

【讨论】:

【参考方案2】:

虽然已经回答了,但这里有一个sn-p:

QObject *sigsender=sender();
if (sigsender) 
    DEBUG << " signal call objn: " << sigsender->objectName() << " clasn: " << sigsender->metaObject()->className();
 else 
    DEBUG << " direct call";

【讨论】:

以上是关于Qt - 当一个类中有多个 QTcpSocket 时,我如何知道哪个 QTcpSocket 发出了 readyRead 信号?的主要内容,如果未能解决你的问题,请参考以下文章

Qt笔记-QTcpSocket跨线程调用(官方推荐方法,非百度烂大街方法)

Qt:当用户关闭它时,在控制台应用程序中检测到 QTcpSocket 断开连接

Qt基础之三十四:QTcpSocket和QTcpServer源码分析

C++ Qt - QTcpSocket - 找不到文件

Qt的Socket数据通讯的一个样例。

49.Qt-网络编程之QTCPSocket和QTCPServer(实现简易网络调试助手)