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

pw_windgod 2011-06-01 12:02:32
例如函数:
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?
...全文
2679 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
windywater119 2013-11-11
  • 打赏
  • 举报
回复
sender()
seanyxie 2013-11-09
  • 打赏
  • 举报
回复
用QSignalMapper映射一下
HappyJandun 2013-10-14
  • 打赏
  • 举报
回复 1
5L的两个方法没试。可能我的比较简单。
QObject* lSender=sender();
    if(lSender==0)
       return ;
    if(lSender->objectName()=="btnNum0")
    {
        emit sglEnter("0");
        return ;
    }
SoulRed 2011-11-29
  • 打赏
  • 举报
回复
项目不大的话建议用2楼的。
TwilightSun 2011-06-02
  • 打赏
  • 举报
回复
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*)));
文森特houzy 2011-06-02
  • 打赏
  • 举报
回复
虽然2楼的方法更省事,不过确实不符合面向对象的思想
donwmufromdying 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhh_steven 的回复:]
引用 1 楼 sxsong_04 的回复:

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


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

这个正解!!
zhh_kv 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sxsong_04 的回复:]

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

也可以使用QObject * QObject::sender () const
然后类型转化到QTcpSocket,再判断具体是哪个socket;
sxsong_04 2011-06-01
  • 打赏
  • 举报
回复
如果处理不同的话那就定义两个槽函数吧
蜗牛sf 2011-06-01
  • 打赏
  • 举报
回复
2楼正解!

16,202

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧