QT 自定义 信号 槽 解决 ‘staticMetaObject’ is not a member of

转自:https://pswzyu.iteye.com/blog/1284118

今天学习QT的时候遇到这样一个问题, 简单来说就是一个需要使用信号和槽机制的子类在继承父类并添加 Q_OBJECT 宏之后报这样的错误: ‘staticMetaObject’ is not a member of ‘Manager’
在网站搜索了这样一篇帖子, 转载来自:http://slopjong.de/2008/10/07/staticmetaobject-is-not-a-member/
I tried to compile a code looking like this:

#ifndef CONTROLLER_H_
#define CONTROLLER_H_

#include

class AbstractClass
{
public:
    virtual ~AbstractClass() {}
    virtual void update() = 0;
};

class Controller :
      public AbstractClass, public QObject
{
      Q_OBJECT

public:
      Controller();
      virtual ~Controller();
      virtual void update();

public slots:
      void m();
};

#endif /*CONTROLLER_H_*/

If you’re trying to compile it you get an error:
tmp/moc/moc_Controller.cpp:45: error: ‘staticMetaObject’ is not a member of ‘AbstractClass’
tmp/moc/moc_Controller.cpp: In member function ‘virtual void* Controller::qt_metacast(const char*)’:
tmp/moc/moc_Controller.cpp:61: error: ‘qt_metacast’ is not a member of ‘AbstractClass’
tmp/moc/moc_Controller.cpp: In member function ‘virtual int Controller::qt_metacall(QMetaObject::Call, int, void**)’:
tmp/moc/moc_Controller.cpp:66: error: ‘qt_metacall’ is not a member of ‘AbstractClass’
make: *** [tmp/objects/moc_Controller.o] Error 1
The error is caused by a bad order of inheritance.
Instead of this

class Controller :
	public AbstractClass, public QObject
{
   ...
you should use this
class Controller :
	public QObject, public AbstractClass
{
   ...
}

总结一下要自定义信号和槽的话首先你这个类要是一个QObject的子类, 如果需要多继承要将 QObject 放在前面, 同时, 还需要在类声明的开始使用 Q_OBJECT 宏

猜你喜欢

转载自blog.csdn.net/QIJINGBO123/article/details/87375984