• 563阅读
  • 7回复

[提问]关于Qt中信号槽携带参数的数量 [复制链接]

上一主题 下一主题
离线不识字
 

只看楼主 倒序阅读 楼主  发表于: 2023-12-01
我在看《Qt5开发及实例》第四版一书中,在第九章的示例CH905中有一处代码为
  1. connect(fileLineEdit,SIGNAL(returnPressed()),this,SLOT(slotShow(QDir)));
  2.     connect(fileListWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(slotDirShow(QListWidgetItem*)));
两个槽函数的声明如下
  1. public slots:
  2.     void slotShow(QDir dir);
  3.     void slotDirShow(QListWidgetItem *item);

第二个信号槽携带的参数类型数量一致,没有问题,但是第一个信号槽,信号无参数,槽有参数,代码运行却没有报错(Qt5.12.12),但是在fileLineEdit中按下回车键却没有反应。
我的问题是,信号槽连接时,如果信号携带的参数大于槽携带的参数(先不考虑参数类型),那么多的参数会被舍弃,信号槽能正常连接;
但如果信号携带的参数小于槽携带的参数呢?也会跟槽函数参数是否有默认值有关吗?
在线snow_man_0

只看该作者 1楼 发表于: 2023-12-03
用新式的、成员函数地址做信号槽的连接,带参数检查

老式的,编译时没有参数检查。如果有名字空间,还要在信号槽里加名字空间,稍麻烦。新式的运行效率也高一些
离线不识字

只看该作者 2楼 发表于: 2023-12-05
回 snow_man_0 的帖子
snow_man_0:用新式的、成员函数地址做信号槽的连接,带参数检查
老式的,编译时没有参数检查。如果有名字空间,还要在信号槽里加名字空间,稍麻烦。新式的运行效率也高一些
 (2023-12-03 04:53) 

你的意思是改用新式的连接方式,编译就会不通过了吗?也就是书上的这个连接是有问题的是吗?
离线angelus

只看该作者 3楼 发表于: 2023-12-05
回 不识字 的帖子
不识字:你的意思是改用新式的连接方式,编译就会不通过了吗?也就是书上的这个连接是有问题的是吗? (2023-12-05 15:06) 

老式信号槽用字符串链接,编译不会检查的,只用在一些特殊的使用上
离线dbzhang800

只看该作者 4楼 发表于: 2023-12-06
回 不识字 的帖子
不识字:你的意思是改用新式的连接方式,编译就会不通过了吗?也就是书上的这个连接是有问题的是吗? (2023-12-05 15:06) 

要相信自己的判断,书上是错的
离线不识字

只看该作者 5楼 发表于: 2023-12-13
回 angelus 的帖子
angelus:老式信号槽用字符串链接,编译不会检查的,只用在一些特殊的使用上 (2023-12-05 15:54) 

嗯嗯,我现在老式的只用在一些同名信号上,其它都已经改用新式的了
离线不识字

只看该作者 6楼 发表于: 2023-12-13
回 dbzhang800 的帖子
dbzhang800:要相信自己的判断,书上是错的 (2023-12-06 23:58) 

哈哈,好的,我最近几个月刚开始学Qt,所以有很多问题不确定,谢谢大佬的肯定
在线spygg

只看该作者 7楼 发表于: 2023-12-15
connect不允许槽的参数多于信号的参数个数, 除非槽函数多于的参数有默认值
4条评分好评度+1贡献值+1金钱+5威望+1
不识字 好评度 +1 - 2023-12-15
不识字 贡献值 +1 - 2023-12-15
不识字 威望 +1 - 2023-12-15
不识字 金钱 +5 - 2023-12-15
签名就是这么浪
快速回复
限100 字节
 
上一个 下一个