当插槽确实存在时,Qt连接"没有这样的插槽"

Ric*_*832 5 qt signals-slots

Qt v4.8.0,VC2010编译器

我有一个QMainWindow基础类,我正在尝试发送它涉及的信号QUuid

但是,每次运行它我都会收到错误:

Object::connect: No such slot MainWindow::on_comp_connected(QUuid) in ..\..\src\mainwindow.cpp:143
Object::connect:  (receiver name: 'MainWindow')
Run Code Online (Sandbox Code Playgroud)

由于插槽肯定存在(它在moc_中),它正在推动我的便利

class MainWindow : public QMainWindow
{
Q_OBJECT

// SNIP private typedefs

public:
    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainWindow();
// SNIP public methods

signals:
   void testSendQuuid(const QUuid &qcid);

public slots:
   void on_comp_connected(const QUuid &qcid);

private:
// SNIP private parts

QOpenAcnController *acnInt;  // This is where the signal comes from

};
Run Code Online (Sandbox Code Playgroud)

MainWindow构造函数的末尾(提到的第143行)我有:

connect(acnInt, SIGNAL(callback_comp_connected(QUuid)),
        this, SLOT(on_comp_connected(QUuid)));
Run Code Online (Sandbox Code Playgroud)

鉴于插槽肯定存在于moc_mainwindow.cpp中(我检查过,它是插槽#1),究竟是什么阻止连接发生?

如果我尝试将testSendQuuid(QUuid)信号连接到插槽,我就没有这样的信号,也没有这样的插槽.

我不能为我的生活弄清楚为什么Qt否认存在一个绝对存在的插槽!

Sca*_*ode 5

检查是否moc_mainwindow.cpp在您的计算机中Build Path。或者您正在使用其他的moc_window.cpp文件。因为,例如:在QtCreator中,它将源构建到新的构建目录中。如果尝试在其他位置打开源,它也会使用旧的moc_cpp文件。

我要说的是,您检查的moc文件可能包含这些插槽定义,但是编译器可能正在使用其他较早创建的moc文件。


小智 5

我通过在mainwindow类中添加Q_OBJECT宏解决了问题。