当前位置:编程学习 > wap >>

Qt的槽函数如何获得信号的发送者?

例如函数:
    QObject::connect(m_clientConnection, SIGNAL(readyRead()), this, SLOT(mesgRead(QTcpSocket*)));
    QObject::connect(m_tcpClient, SIGNAL(readyRead()), this, SLOT(mesgRead(QTcpSocket*)));
    在槽函数mesgRead中如何判断是那个QTcpSocket?, 因为我有两个QTcpSocket,  两个都用上上面的连接函数,一旦有数据来,就使用相同的槽函数, 但是槽函数如何判断是那个sender发送的呢? 有没有什么方法可以获得signal的sender?
--------------------编程问答-------------------- 如果处理不同的话那就定义两个槽函数吧 --------------------编程问答--------------------
引用 1 楼 sxsong_04 的回复:
如果处理不同的话那就定义两个槽函数吧


也可以使用QObject * QObject::sender () const 
然后类型转化到QTcpSocket,再判断具体是哪个socket;
--------------------编程问答--------------------
引用 2 楼 zhh_steven 的回复:
引用 1 楼 sxsong_04 的回复:

如果处理不同的话那就定义两个槽函数吧


也可以使用QObject * QObject::sender () const 
然后类型转化到QTcpSocket,再判断具体是哪个socket;


这个正解!!
--------------------编程问答-------------------- 2楼正解! --------------------编程问答-------------------- lz有两种方式改变:
方案1:按照2楼说法做,但是这样违反了面向对象的思想,Qt不提倡:

connect(m_clientConnection, SIGNAL(readyRead()), this, SLOT(mesgRead()));
//Signal里没有参数Slot里也接不到参数

//然后在mesgRead()里
void mesgRead()
{
   QTcpSocket* sc=dynamic_cast<QTcpSocket*>(sender());
   if(sc==0)
      return;
   //在此添加处理代码
}


方案2:自己派生个类(比较麻烦)
从QTcpSocket派生一个类
加个Signal
myReadyRead(QTcpSocket*);
加个Slot
reRead();
构造方法里面
connect(this,SIGNAL(readyRead()),this,SLOT(reRead()));
void reRead()
{
   emit(myReadyRead(this));
}
然后connect(m_clientConnection, SIGNAL(readyRead()), this, SLOT(mesgRead(QTcpSocket*)));
变为connect(m_clientConnection, SIGNAL(myReadyRead(QTcpSocket*)), this, SLOT(mesgRead(QTcpSocket*)));
--------------------编程问答-------------------- 虽然2楼的方法更省事,不过确实不符合面向对象的思想 --------------------编程问答-------------------- 项目不大的话建议用2楼的。 --------------------编程问答-------------------- 5L的两个方法没试。可能我的比较简单。
QObject* lSender=sender();
    if(lSender==0)
       return ;
    if(lSender->objectName()=="btnNum0")
    {
        emit sglEnter("0");
        return ;
    }
--------------------编程问答-------------------- 用QSignalMapper映射一下 --------------------编程问答-------------------- sender()
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,