2009-07-15 6 views
6

Ho un errore di compilazione con uno slot in Qt. Ho una classe che ha una fessura pubblico:Qt e C++ - riferimento non definito allo slot

void doSomething(); 

In costruttore di questa classe che faccio:

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

ho QLineEdit - oggetto textFrom. L'errore di generazione è

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

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

Help me, per favore (:

+0

Ciò non sembrare abbastanza informazioni davvero. Se commentate la vostra dichiarazione di connessione, l'errore scompare? – dborba

risposta

15

vuoto doSomething(); si presenta come un elemento di cattura dal file di intestazione, hai implementare lo slot per sé

1

breve nota sulla sintassi? : di solito si usa sia

connect(from, SIGNAL(sig()), to, SLOT(slot())); 

che è sostanzialmente equivalente a

QObject::connect(from, SIGNAL(sig()), to, SLOT(slot())); 

Cosa farai se stai chiamando da qualche parte non all'interno di un QObject.
Mentre questa sintassi:

to->connect(from, SIGNAL(sig()), SLOT(slot())); 

è anche ragionevole. Ma questa sintassi:

to->connect(from, SIGNAL(sig()), to, SLOT(slot())); 

è solo il codice confuso e duplicati.

+0

... e lancia un avviso del compilatore, perché 5-arg QObject :: connect() è un metodo statico ... –

0

Stavo ottenendo lo stesso errore in una build Qt.

stavo aggiungendo uno slot per il segnale finito dal Qprocess - la doco su cui dice:

void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus) 

Il mio codice:

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

compilando quanto sopra generato: /home/ttguy/kdenlive/kdenlive_git/build-kdenlive-Desktop-Default/src/moc_freesound.cpp:121: errore: riferimento non definito a `FreeSound :: slotPreviewFinished (int, QProcess :: Valore di uscita)'

E la correzione è stata come prefisso mia implementazione di slotPreviewFinished con FreeSound ::

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