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 信号?的主要内容,如果未能解决你的问题,请参考以下文章