Qt5:错误:“qt_metacall”不是 的成员

Qt5: error: ‘qt_metacall’ is not a member of

本文关键字:不是 成员 metacall 错误 qt Qt5      更新时间:2023-10-16

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

主.c

#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

主窗口.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

主窗口.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) };

这是什么意思?

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

class Emiter : public QObject
{
     Q_OBJECT
public:
signals:
   void anSignal ();
};

有关更多详细信息答案:请单击此处

另一种情况是,如果使用多个继承,则需要将QObject作为第一个父类。