【QT问题解决】运行时出现QMetaObject::connectSlotsByName: No matching signal for XXX

本文探讨了在使用QTimer时遇到的QMetaObject::connectSlotsByName错误,原因在于自定义槽函数与隐式连接格式冲突。作者提供了避免命名误导的方法,并给出了正确的槽函数命名建议。

在使用QTimer的时候定义了一个槽函数void on_timer_timeout(),然后运行的时候就出现了QMetaObject::connectSlotsByName: No matching signal for on_timer_timeout的信息。

原因分析:

QT信号和槽的关联方式分两种:

1.显式连接

自己手动写代码使用connect去连接信号和槽就是显式连接

2.隐式连接

隐式连接是QT的编译系统自动的连接信号和槽,我们自己并没有相应的code去连接信号和槽,此时编译系统会自动的从定义的槽函数中去查找按以下格式命名的槽函数将其与子对象进行连接。

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

可以看到上面定义的void on_timer_timeout()正好跟这个格式匹配,这样就会误导编译器。

所以自定义的槽函数一定要避免上面的命名格式

可以使用以下格式

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

QMetaObject::connectSlotsByName: No matching signal for XXX 原理探究 - 康宇PL - 博客园

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值