搬家中,,,,请关注 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 宏
分享到:
相关推荐
在探讨Qt框架中信号与槽机制的具体实现之前,我们首先简要回顾一下信号与槽的基本概念。信号与槽(Signals and Slots)是Qt库中用于对象间通信的核心机制之一。与传统的回调函数不同,这种机制更加灵活、易于使用且...
QTxlsx是一个基于Qt框架的库,用于读写Microsoft Excel(XLSX)文件。它为Qt开发者提供了一种方便的方式来处理Excel数据,无需依赖于Microsoft Office或其他的第三方库如LibreOffice或Apache POI。这个库适用于Qt ...
元对象系统是Qt框架的核心部分,它使得C++对象能够支持动态属性、信号与槽机制,以及其他元数据相关的功能。本文将深入分析Qt的元对象系统,并探讨其关键组件。 首先,`QObject`类是元对象系统的基础,它是所有利用...
LibXL是一个可以读写Excel文件的库。它不需要Microsoft Excel和。net框架,结合了易于使用和强大的功能,获取key:https://blog.csdn.net/qq_43445867/article/details/132572402
在Qt中,QMetaObject类是反射的核心,它包含了关于一个类型的所有元信息,如类名、方法、信号、槽、属性等。Q_OBJECT宏是实现反射的关键,需要在任何希望支持反射的类中包含它。这将链接到Qt的MOC(Meta-Object ...
const QMetaObject *personMetaObject = Person::staticMetaObject; // 遍历类的方法 for (int i = 0; i < personMetaObject->methodCount(); ++i) { QMetaMethod method = personMetaObject->method(i); qDebug...
在QT开发中,将结构体转换为JSON文本是一项常见的任务,特别是在数据交换、存储或网络通信等场景。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读易写、易于机器解析和生成的特点,被广泛...
QRedis 一个基于 ,基于的客户端用户界面。把招工广告向想合作的人开放。 想知道您想拥有哪些功能欢迎拉取请求您总是可以提出一个问题,说您想成为团队的一员安装$ pip install qredis要求Python> = 3.5 5(或将来的...
通过与C++的深度集成,QML能够充分利用Qt的底层功能,如信号和槽机制,以及数据模型。 **Model**(数据模型)在Qt中是数据驱动编程的核心,它提供了数据和视图之间的桥梁。模型可以是任何类型的数据结构,如数组、...