我可以继承QEvent吗?

时间:2013-08-14 09:03:38

标签: qt qt5 qevent

我尝试创建一个类QEvent的子类,但是在构建之后我遇到了错误。

我的步骤,
1.使用Qt控制台模板创建项目
2.创建以下代码

#ifndef MYEVENT_H
#define MYEVENT_H

#include <QEvent>
#include <QObject>

class MyEvent : public QEvent
{
    Q_OBJECT
public:
    explicit MyEvent();

signals:

public slots:
};

#endif

//CPP File
MyEvent::MyEvent() :
    QEvent(QEvent::User)
{
}

moc_MyEvent.cpp:70:21: error: invalid use of non-static data member 'd_ptr'
    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
           ~~~~~~~~~^~~~~
moc_MyEvent.cpp:70:21: error: 'd_ptr' is a protected member of 'QObject'
../../../../../../Qt5.1.0/5.1.0/clang_64/include/QtCore/qobject.h:411:33: note: declared protected here
    QScopedPointer<QObjectData> d_ptr;
                            ^

QT5
Mac OSX 10.8.4


我该如何解决?为什么?感谢。

3 个答案:

答案 0 :(得分:4)

Dcow给出了正确答案。

您的错误是QEvent不会继承QObject,而您尝试这样做。您不应该使用Q_OBJECT宏,或者您也应该从QObject开始您的班级。但这是黑暗的一面。

答案 1 :(得分:2)

正如已经指出的那样:否Q_OBJECT。但是,让我添加一些内容,并将注意力集中在一个很少使用且广为人知的宏:Q_GADGET

几乎Q_OBJECT的{​​{1}}。

来自Qt Docs:

  

使用Q_GADGET而不是Q_OBJECT来启用元对象系统   支持不是QObject子类的类中的枚举。 Q_GADGET   使类成员staticMetaObject可用。 staticMetaObject是   类型为QMetaObject,并提供对使用声明的枚举的访问   Q_ENUMS。 Q_GADGET仅适用于C ++。

不时派上用场。

答案 2 :(得分:1)

首先为什么?您应该写下为什么需要这个,我确定您尝试解决的问题解决方案是错误的!

其次问题是Q_OBJECT宏。 QEvent 一个QObject因此此宏不适用,这就是您遇到此错误的原因。