Qt moc_mainwindow

Posted

技术标签:

【中文标题】Qt moc_mainwindow【英文标题】: 【发布时间】:2017-03-28 16:54:52 【问题描述】:

我正在开发一个应用程序(使用 OpenCV),我在其中创建了一个滚动条和相关功能,但最后我删除了滚动条。出现以下错误:

moc_mainwindow.cpp:-1: erreur : 未定义对 MainWindow::on_verticalScrollBar_actionTriggered(int)' 的引用

moc_mainwindow.cpp:-1: erreur : 未定义对 MainWindow::on_verticalScrollBar_sliderPressed()' 的引用

:-1: erreur : release/moc_mainwindow.o: `.data' 部分中的错误重定位地址 0x4

collect2.exe:-1: erreur : error: ld 返回 1 退出状态

感谢您的帮助

【问题讨论】:

请阅读如何做一个minimal reproducible example 在 Build 选项卡上按 Clean all 然后运行 ​​Qmake @eyllanesc 我已经清理了项目,但错误仍然存​​在。但是,当我创建与“缺失”的函数相对应的空函数时,代码当然会运行,但它当然不是最佳代码 根据 cmets 听起来好像您已经声明了插槽 MainWindow::on_verticalScrollBar_actionTriggeredMainWindow::on_verticalScrollBar_sliderPressed 但尚未定义/实现它们。 @G.M.是的,你是对的,但问题是我从界面中删除了滚动条,但 Qt 显示了一个关于函数的错误,该函数尚不存在,这就是问题所在...... 【参考方案1】:

错误undefined reference to `MainWindow::...' 是由于您在mainwindow.h 中声明了函数但未在任何地方定义。

要解决这个问题,要么在mainwindow.cpp 中定义它们,要么从mainwindow.h 中删除它们的声明。如果你显然没有使用它们,你应该删除它们。


现在关于“Qt 显示一个关于尚不存在的函数的错误” 你可能指的是QMetaObject::connectSlotsByName: No matching signal for ...

如果您有一个或多个名为on_<objectName>_<signalName> 的插槽(例如on_verticalScrollBar_sliderPressedon_verticalScrollBar_sliderPressed)但对象objectName 不存在或存在但没有名为signalName 的信号,则可能会发生这种情况。

这是由QMetaObject::connectSlotsByName() 引起的,它在对ui->setupUi() 的调用中被调用。此函数将尝试连接与on_<objectName>_<signalName> 语法匹配的每个插槽,并在失败时将警告写入stderr(或调试输出)。

另外我强烈建议您不要使用QMetaObject::connectSlotsByName()on_<objectName>_<signalName> 语法。如果您使用 .ui 文件,则无法阻止对 QMetaObject::connectSlotsByName() 的调用,因为它在生成的代码中,但如果您不使用语法,它将无效。 相反,您应该在代码中显式连接信号和插槽。

见:

[QTBUG-49749] connectSlotsByName() misconnects slots when multiple children have the same name "Proposal to change connectSlotsByName behavior" in Qt developer mailing list

【讨论】:

以上是关于Qt moc_mainwindow的主要内容,如果未能解决你的问题,请参考以下文章

Linux 打包 QT 程序

QT学习之QT 下载安装

Qt 找不到服务 - “org.qt-project.qt.mediaplayer”

[QT]加快qt编译:设置默认多核编译qt

qt + opengl 开发环境的搭建

qt creator和qt的区别