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

本文解决在Qt中使用信号和槽机制时遇到的多继承问题,特别是在子类继承自非QObject类时出现的'staticMetaObject'错误。通过调整继承顺序,将QObject置于首位,并使用Q_OBJECT宏,可以有效避免此类编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自: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 宏

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值