6

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

请帮帮我 (:

4

3 回答 3

16

无效doSomething(); 看起来像头文件中的一个片段,您是否实现了插槽本身?

于 2009-07-15T20:03:29.263 回答
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()));

只是令人困惑和重复的代码。

于 2009-07-15T20:17:40.887 回答
0

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

我正在为 从 Qprocess完成的信号添加一个插槽 - 上面的文档说:

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

我的代码:

自由声音.h

void slotPreviewFinished(int exitCode, QProcess::ExitStatus exitStatus);

自由之声.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;
}
于 2015-11-26T06:05:01.253 回答