QMetaObject::connectSlotsByName

QMetaObject::connectSlotsByName

 

[static] void QMetaObject::connectSlotsByName(QObject *object)

Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:


  void on_<object name>_<signal name>(<signal parameters>);

Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be:


  void on_button1_clicked();

If object itself has a properly set object name, its own signals are also connected to its respective slots.

See also QObject::setObjectName().

 

---------------------------

注意:

        connectSlotsByName 只会为以on_开头的槽去自动寻找一个对应的信号,如果不满足匹配条件,均会提示无法为槽寻找到正确的信号,对于非on_开头的槽,不会进行自动处理;大家需要知道的是,提示无法为槽寻找到正确信号,这并不代表你的代码有错误,只表示你定义了一个以on_开头的槽,但它的命名无法让系统为它自动匹配信号。你需要做的是,对于自定义并进行手动连接的槽,不要以on_开头即可。

 

说明:

  1. 尽量不要让QObject出现相同objectName的情况
  2. 如果同名connectSlotsByName只能给其中一个建立缺省的信号和槽的连接
  3. 如果出现大量编码创建大量控件的情况,最好是自己去建立信号和槽的连接,而不是依赖connectSlotsByName来做到这个工作。connectSlotsByName更适合的任务是与desinger配合完成缺省的信号和槽的连接。

 

其他:

在测试过程中,曾经把ui->setupUi(this);放到了控件创建之前运行,结果运行时提示:

QMetaObject::connectSlotsByName: No matching signal for on_TestButton_clicked

从connectSlotsByName的代码可以看到这实际上执行的是第46行,如果在调试程序中遇到这样的信息,可以检查一下,是否是控件的objectName与你编写的槽里的objectName并不相符。

 

============== End

 

posted @   lsgxeva  阅读(635)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2019-01-07 Java“禁止”泛型数组
2019-01-07 Java和C#语法对比
2019-01-07 JVM 内存区域 (运行时数据区域)
2019-01-07 Java8 使用
2019-01-07 G1收集器的收集原理
2018-01-07 正则表达式---获取英文双引号里面的内容
2018-01-07 正则表达式和字符串处理
点击右上角即可分享
微信分享提示