Qt5:错误:'qt_metacall'不是。的成员

时间:2018-02-02 11:13:23

标签: c++ qt

我尝试用Qt更熟悉singnals和slot。 我想在一个类中发出一个信号,并希望在另一个类中处理它。 这是我的示例代码:

main.c中

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class Emiter
{

signals:
    void anSignal ();
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

private slots:
    void handleEmitter ();

public:
    MainWindow(QWidget *parent = 0);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent)
{
    auto emiter = new Emiter();

    connect( emiter,
             &Emiter::anSignal,
             this,
             &MainWindow::handleEmitter );
}

void
MainWindow::handleEmitter()
{
}

然后我收到此错误:

error: ‘qt_metacall’ is not a member of ‘Emiter’          enum { Value =  sizeof(test(&Object::qt_metacall)) == sizeof(int) };

这是什么意思?

1 个答案:

答案 0 :(得分:2)

信号和广告位仅在QObject派生类中可用,并且需要Q_OBJECT宏。

class Emiter : public QObject
{
     Q_OBJECT
public:

signals:
   void anSignal ();
};

有关详细解答:click here