Qt和C ++ - 对槽的未定义引用

时间:2009-07-15 19:53:58

标签: c++ qt signals-slots undefined-reference

我在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   退出状态

请帮帮我(

3 个答案:

答案 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;
}