`

[转载]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  
哥们!真的感谢了。解决了我一大难题啊!

相关推荐

    QT框架信号原理

    在探讨Qt框架中信号与槽机制的具体实现之前,我们首先简要回顾一下信号与槽的基本概念。信号与槽(Signals and Slots)是Qt库中用于对象间通信的核心机制之一。与传统的回调函数不同,这种机制更加灵活、易于使用且...

    Windows下Qt静态编译连接和DLL依赖问题解决.doc

    3. **自定义编译Qt库**: 对于更高级的用户来说,可以通过自定义编译Qt库的方式解决DLL依赖问题,但这需要一定的技术背景,并非所有开发者都能轻松完成。 4. **替代方案**: 考虑使用其他编译器如Microsoft Visual C++...

    QTxlsx+qt5.9.4+vs2015+vs2017版本库

    QTxlsx是一个基于Qt框架的库,用于读写Microsoft Excel(XLSX)文件。它为Qt开发者提供了一种方便的方式来处理Excel数据,无需依赖于Microsoft Office或其他的第三方库如LibreOffice或Apache POI。这个库适用于Qt ...

    结构体转为JSON文本

    在QT开发中,将结构体转换为JSON文本是一项常见的任务,特别是在数据交换、存储或网络通信等场景。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读易写、易于机器解析和生成的特点,被广泛...

    Qt原对象系统分析总结

    元对象系统是Qt框架的核心部分,它使得C++对象能够支持动态属性、信号与槽机制,以及其他元数据相关的功能。本文将深入分析Qt的元对象系统,并探讨其关键组件。 首先,`QObject`类是元对象系统的基础,它是所有利用...

    在qt中使用libXL

    LibXL是一个可以读写Excel文件的库。它不需要Microsoft Excel和。net框架,结合了易于使用和强大的功能,获取key:https://blog.csdn.net/qq_43445867/article/details/132572402

    qt反射实例.zip

    在Qt中,QMetaObject类是反射的核心,它包含了关于一个类型的所有元信息,如类名、方法、信号、槽、属性等。Q_OBJECT宏是实现反射的关键,需要在任何希望支持反射的类中包含它。这将链接到Qt的MOC(Meta-Object ...

    Qt 使用QMetaObject实现反射机制代码demo

    const QMetaObject *personMetaObject = Person::staticMetaObject; // 遍历类的方法 for (int i = 0; i < personMetaObject->methodCount(); ++i) { QMetaMethod method = personMetaObject->method(i); qDebug...

    qredis:使用Qt和Python的Redis GUI

    QRedis 一个基于 ,基于的客户端用户界面。把招工广告向想合作的人开放。 想知道您想拥有哪些功能欢迎拉取请求您总是可以提出一个问题,说您想成为团队的一员安装$ pip install qredis要求Python> = 3.5 5(或将来的...

    单例、QML、model、数据库

    通过与C++的深度集成,QML能够充分利用Qt的底层功能,如信号和槽机制,以及数据模型。 **Model**(数据模型)在Qt中是数据驱动编程的核心,它提供了数据和视图之间的桥梁。模型可以是任何类型的数据结构,如数组、...

Global site tag (gtag.js) - Google Analytics