`

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

阅读更多

搬家中,,,,请关注 nuihq.com

今天学习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 宏

分享到:
评论
1 楼 cyl19880415 2012-03-06  
哥们!真的感谢了。解决了我一大难题啊!

相关推荐

Global site tag (gtag.js) - Google Analytics