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

被折叠的 条评论
为什么被折叠?



