• 8144阅读
  • 9回复

[提问]槽的函数不能带参数? [复制链接]

上一主题 下一主题
离线icuit
 

只看楼主 倒序阅读 楼主  发表于: 2011-07-29
我用一个点击菜单事件触发我写的一个函数,但是发现如果函数加了参数就不成功。
这是为什么?
如何解决?
谢谢
离线wxj120bw

只看该作者 1楼 发表于: 2011-07-29
回 楼主(icuit) 的帖子
贴代码 不要让别人猜
离线abcdlcq

只看该作者 2楼 发表于: 2011-07-29
离线icuit

只看该作者 3楼 发表于: 2011-07-29

  1. .h
  2. public slots:void GetFileName();    
  3. .cpp
  4. connect(ui.actionOpenVectorFile,SIGNAL(triggered(bool)),this,SLOT(GetFileName(1)));
  5. connect(ui.actionOpenRasterFile,SIGNAL(triggered(bool)),this,SLOT(GetFileName(2)));
  6. GetFileName(arg)
  7. {
  8.     if( arg==1 )
  9.     {}
  10.     else if( arg==2 )
  11.     {}
  12. }





还是我的思路有问题?

离线icuit

只看该作者 4楼 发表于: 2011-07-29
程序是不会报错的,但是不会触发slot
离线dbzhang800

只看该作者 5楼 发表于: 2011-07-29
1. 如果你有检查 connect 返回值的习惯,你应该发现已经有问题了

2. 如果你有检查控制台输出的习惯,你应该已经看到警告信息以及给出的原因
离线roywillow

只看该作者 6楼 发表于: 2011-07-29
槽函数的数据类型要与信号提供的参数严格一致
槽函数的参数不能多于信号提供的参数
别想当然的认为能够在连接信号和槽的时候给槽传递一个参数值
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线午小夜

只看该作者 7楼 发表于: 2011-07-29
信号传给槽的参数必须类型一致.不要误以为connect的时候可以给槽一个固定的值.
信号传上来的参数是什么值,槽接收到的就是什么值.
类似应该改为:
connect(ui.actionOpenVectorFile,SIGNAL(triggered(bool)),this,SLOT(GetFileName(bool)));
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线yiyaaixuexi

只看该作者 8楼 发表于: 2011-07-29
信号传给槽的参数必须类型一致.
离线icuit

只看该作者 9楼 发表于: 2011-07-29
谢谢大家的回复,加深了我对信号机制的理解。
我之前确实以为可以传一个固定的值进去以达到只写一个slot函数而用参数来区分具体做什么。

看来还是要写多个slot函数才行了
快速回复
限100 字节
 
上一个 下一个