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

时间:2014-06-22 19:41:35

标签: c++ qt signals-slots

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

  

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

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

谢谢。

2 个答案:

答案 0 :(得分:6)

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

您可以更改广告位的名称,以便它不会尝试查找匹配的信号,并直接使用QObject::connect代替QMetaObject::connectSlotsByName。此外,如果您希望filename_in使用connect信号,则必须为参数triggered指定默认值。

答案 1 :(得分:2)

我面临同样的Warning/Error QMetaObject :: connectSlotsByName:没有匹配信号

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

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

的名称即可

<强>解决方案
更改插槽名称,例如on_actionOpenTriggered,此警告消失。

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

希望它会对某人有所帮助。