我在Qt中有一个插槽的构建错误。我有一个有公共插槽的课程:
void doSomething();
在这个类的构造函数中我做:
this->connect( ui->textFrom, SIGNAL(returnPressed()),
this, SLOT(doSomething()) );
我有QLineEdit - textFrom对象。构建错误是
../moc_mainwindow.cpp:66: undefined reference to `MainWindow::doSomething()'
: - 1:错误:collect2:ld返回1 退出状态
请帮帮我(
答案 0 :(得分:15)
void doSomething();看起来像头文件中的剪辑,你是否实现了插槽本身?
答案 1 :(得分:1)
关于语法的快速说明:通常你会使用
connect(from, SIGNAL(sig()), to, SLOT(slot()));
基本等同于
QObject::connect(from, SIGNAL(sig()), to, SLOT(slot()));
如果您从不在QObject内部的某个地方打电话,您将会这样做 虽然这个语法:
to->connect(from, SIGNAL(sig()), SLOT(slot()));
也是合理的。 但是这个语法:
to->connect(from, SIGNAL(sig()), to, SLOT(slot()));
只是令人困惑并重复代码。
答案 2 :(得分:0)
我在Qt版本中遇到了同样的错误。
我正在为Qprocess中的信号 finished 添加一个插槽 - doco上写着:
void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)
我的代码:
freesound.h
void slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus);
freensound.cpp
m_previewProcess = new(Qprocess);
connect (m_previewProcess ,SIGNAL (finished(int , QProcess::ExitStatus )),this,SLOT(slotPreviewFinished(int , QProcess::ExitStatus)));
void slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
qDebug()<<"// slotPreviewFinished: "<<exitCode;
}
编译上面生成的: /home/ttguy/kdenlive/kdenlive_git/build-kdenlive-Desktop-Default/src/moc_freesound.cpp:121:错误:未定义引用`FreeSound :: slotPreviewFinished(int,QProcess :: ExitStatus)'
修复方法是将我的slotPreviewFinished实现加上FreeSound ::
的前缀void FreeSound::slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
qDebug()<<"// slotPreviewFinished: "<<exitCode;
}