• 10680阅读
  • 5回复

信号与槽参数不一致怎么办? [复制链接]

上一主题 下一主题
离线yshadow
 

只看楼主 倒序阅读 楼主  发表于: 2008-07-17
— 本帖被 XChinux 执行加亮操作(2008-07-21) —
关键词: SQL
信号与槽参数不一致怎么办?

看了许多例子,信号与槽参数都要求一致,才能发身.

如果现在要求槽带有参数,而信号没有带参数,怎么办?
离线weizhy
只看该作者 1楼 发表于: 2008-07-17
能否说得更具体一些?

若是单个信号和单个槽的链接,估计你得换个信号才能成功

若是多个信号(无参数)和单个槽的链接,可以使用QSignalMapper,可以为每个无参数信号定义一个标志

不知道你的具体情况是什么
离线yshadow

只看该作者 2楼 发表于: 2008-07-21
weizhy!
void function()
{
m_nH[++m_Nconnected].tcpSvrConn=m_tcpServer->nextPendingConnection();
connect(m_nH[m_Nconnected].tcpSvrConn,SIGNAL(readyRead()),this,SLOT(recvFromClient()));
}
void function()已经是槽,这里是多个readyRead()信号对同一个槽recvFromClient(),
现在我想把这个++m_Nconnected这个自增的参数传给recvFromClient()里,当然recvFromClient()这个函数是自己定义的,是一个自定义类的槽函数.
当然最好是把m_nH这个结构体进去是最好的事情,可是我尝试了多种办法没有成功.
weizhy! 有什么新的意见,或方法,谢!
离线yshadow

只看该作者 3楼 发表于: 2008-07-21
原因是这个readyRead()信号是系统内部的,
我该把这个信号继承?
这样做花费太大,也不一定办成事,
离线lideng203
只看该作者 4楼 发表于: 2008-07-21
信号和槽的机制是类型安全的:一个信号的签名必须与它的接收槽的签名相匹配。(实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额外的签名。)因为签名是一致的,编译器就可以帮助我们检测类型不匹配。信号和槽是宽松地联系在一起的:一个发射信号的类不用知道也不用注意哪个槽要接收这个信号。Qt的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。信号和槽可以使用任何数量、任何类型的参数。它们是完全类型安全的:不会再有回调核心转储(core dump)。

意味着必须改写信号
离线yshadow

只看该作者 5楼 发表于: 2008-07-22
谢谢了
快速回复
限100 字节
 
上一个 下一个