Qt и C ++ - неопределенная ссылка на слот - PullRequest
6 голосов
/ 15 июля 2009

У меня ошибка сборки со слотом в 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 ]

15 голосов
/ 16 июля 2009

void doSomething (); выглядит как фрагмент из файла заголовка, вы реализовали сам слот?

1 голос
/ 16 июля 2009

краткое примечание о синтаксисе: обычно вы используете либо

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 голосов
/ 26 ноября 2015

Я получаю ту же ошибку в сборке Qt.

Я добавил слот для сигнала закончен из Qprocess - документ, на котором написано:

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