'QMetaObject :: connectSlotsByName:在Ubuntu QT上构建时出现'错误的匹配信号'

时间:2014-06-24 10:07:20

标签: c++ qt ubuntu

我之前已经意识到这个问题,虽然我的情况略有不同,但我发现其他答案都没有用,我是QTCreator的新手。

我正在尝试使用QTCreator构建一个项目,它可以在OSX上构建得很好但是在使用Ubuntu构建时我得到了这个错误:

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

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

任何人都可以对我需要做的事情进行一次演练,之前的答案已经说明了如何明确地连接事物,但没有详细说明如何做到这一点。有关搜索项目以找到修复位置的任何提示(我没有编写原始程序)。

感谢任何帮助 汤姆

2 个答案:

答案 0 :(得分:11)

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

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

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

对象名称和信号名称用下划线分隔。我不确定但是对象名称本身(actionWrite_Device)包含下划线可能是一个问题,因此不清楚信号名称是什么(它可以是device_triggered或{{1} })。对象名称也是如此。这种模棱两可可能会造成麻烦。

答案 1 :(得分:0)

如果这在一个平台上有效,但在另一个平台上无效,则可能的原因是您没有在其中一个平台上进行干净构建。

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

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


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