2009-07-15 35 views
6

我有一个Qt插槽的构建错误。我有其中有一个公共槽的类:Qt和C++ - 未定义的插槽参考

void doSomething(); 

在这个类我做的构造函数:

this->connect(ui->textFrom, SIGNAL(returnPressed()), 
       this, SLOT(doSomething())); 

我QLineEdit的 - textFrom对象。生成错误是

../moc_mainwindow.cpp:66: undefined reference to `MainWindow::doSomething()' 

:-1: error: collect2: ld returned 1 exit status

帮助我,请(:

+0

这似乎不是足够的信息真的。如果你评论你的连接语句,错误甚至会消失吗? – dborba 2009-07-15 20:02:05

回答

15

无效DoSomething的();看起来像头文件,可谓物美价廉,你实现插槽本身

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())); 

仅仅是混乱和重复的代码。

+0

...并引发编译器警告,因为5-arg QObject :: connect()是一个静态方法... – 2009-07-16 08:18:14

0

我在Qt构建中遇到同样的错误。

我添加插槽信号从QProcess中完成 - 在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:error:未定义引用`FreeSound :: slotPreviewFinished(int,QProcess ::退出状态)”

而且修复是我的前缀执行slotPreviewFinished与Freesound上::

void FreeSound::slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus) 
{ 
    qDebug()<<"// slotPreviewFinished: "<<exitCode; 
}