我可以将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


我该如何解决,为什么?谢谢

Dcow给出了正确的答案。

您的错误是QEvent不是从QObject继承的,您尝试这样做。您不应该使用Q_OBJECT宏,或者您也应该从QObject插入您的类。但这是黑暗的一面。

首先为什么?你应该写下你为什么需要这个,我相信你试图解决的问题解决方案是错误的!

第二个问题是Q_OBJECT宏。QEvent而不是QObject,因此此宏不适用,这就是出现此错误的原因。

如前所述:无Q_OBJECT。但让我补充一些内容,并将您的注意力指向一个很少使用且广泛未知的宏:Q_GADGET

对于非QObjects几乎Q_OBJECT

来自Qt文档:

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

不时派上用场。

相关内容

  • 没有找到相关文章

最新更新