我之前已经意识到这个问题,虽然我的情况略有不同,但我发现其他答案都没有用,我是QTCreator的新手。
我正在尝试使用QTCreator构建一个项目,它可以在OSX上构建得很好但是在使用Ubuntu构建时我得到了这个错误:
QMetaObject::connectSlotsByName: No matching signal for on_actionWrite_Device_triggered()
项目仍然构建并部分工作,但不会写入外部设备(程序的重点)。
任何人都可以对我需要做的事情进行一次演练,之前的答案已经说明了如何明确地连接事物,但没有详细说明如何做到这一点。有关搜索项目以找到修复位置的任何提示(我没有编写原始程序)。
感谢任何帮助 汤姆
答案 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
文件也可能有条件部分,导致在不同平台上构建不同的文件,或者使用不同的编译命令。