QMetaObject :: connectSlotsByName:没有匹配的信号

jhy*_*jhy 4 c++ qt signals-slots

我设置了一个QT菜单,它自动与动作功能连接on_actionOpen_triggered().后来我想将一个文件名字符串传递给这个函数,以便在特殊条件下手动调用该函数.所以我将函数签名更改为on_actionOpen_triggered( const char *filename_in ).在此更改后,程序运行良好,但终端有抱怨,

QMetaObject :: connectSlotsByName:on_actionOpen_triggered(const char*)没有匹配的信号

我想知道发生了什么,以及如何为这个菜单操作函数添加参数.

谢谢.

AB *_*lim 12

我面临着相同的Warning/Error QMetaObject::connectSlotsByName: No matching signal for

并得到了简单的解决方案。例如:

问题:
QMetaObject::connectSlotsByName: No matching signal for on_actionOpen_triggered(const char*)警告您只需要更改名称Slot

解决方案
更改插槽名称on_actionOpenTriggered,此警告消失。

提示
Qt 尝试理解它的默认插槽,例如on_<name_of_object>_<action>,因此如果您指定任何具有上述签名的插槽,Qt 将抛出警告。

希望它会帮助某人。


pra*_*mus 6

Qt自动连接机制无法找到适合您插槽的信号.对于菜单项,没有信号可以使您的插槽与一个参数匹配,并且信号的参数不得少于插槽.

您可以更改插槽的名称,以便它不会尝试查找匹配的信号,QObject::connect而是直接使用而不是QMetaObject::connectSlotsByName.此外,filename_in如果您想connect使用triggered信号,则必须为参数指定默认值.

  • 看来你不应该将你的手动插槽命名为"on_something()".尝试在类的"slots:"部分创建一个名为"on_something()"的函数,不要将它连接到任何东西,你会发现Qt仍然会尝试创建一个连接.因此,名称以"on_"开头的唯一插槽应该是Qt创建者自动生成的插槽. (5认同)