在 Ubuntu QT 上构建时出现"QMetaObject::connectSlotsByName: no match signal for"错误



我知道这个问题以前有人问过,尽管我的情况略有不同,而且我发现其他答案都没有帮助,我是QTCreator的新手。

我试图用QTCreator构建一个项目,在OSX上构建得很好,但当用Ubuntu构建它时,我得到这个错误:

QMetaObject::connectSlotsByName: No matching signal for on_actionWrite_Device_triggered()

项目仍然构建并部分工作,但不会写入外部设备(程序的点)。

谁能给我一个我需要做什么,之前的回答已经明确地说了连接的东西,但没有详细说明如何做到这一点。在整个项目中搜索找到修复这个问题的地方有什么建议吗(我没有写原始程序)

任何帮助都是感激的汤姆

看看这个:http://qt project.org/doc/qt - 4.8 -/- qmetaobject.html # connectSlotsByName

方法connectSlotsByName尝试使用以下形式将插槽连接到信号:

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

对象名称和信号名称用下划线分隔。我不确定,但它可能是一个问题,对象名称本身(actionWrite_Device)包含一个下划线,因此不清楚信号名称是什么(它可能是device_triggeredtriggered)。对象名称也是如此。这种歧义可能会引起麻烦。

如果这在一个平台上有效,但在另一个平台上不起作用,那么可能的原因是您在其中一个平台上没有一个干净的构建。

要进行干净的构建,首先要清除源目录中的所有额外文件(例如使用版本控制工具删除所有未版本化的文件)。这很重要,因为编译器会优先在源目录下查找一些文件,如果那里有过时的生成源文件(moc_*.*, ui_*.h等),它们将被使用,而不是构建目录中的正确文件。然后确保在Qt Creator中为项目和构建启用了影子构建,并进行干净的构建。

或者直接从版本控制中获得一个新的签出/克隆到一个干净的目录。


另一个可能的原因是使用#ifdef导致不同平台上的构建结果不同。或者项目的.pro文件也可能有条件部分,导致在不同的平台上构建不同的文件,或者使用不同的编译命令。

最新更新