2009-07-15 46 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; 
}