首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以子类QEvent吗?

我可以子类QEvent吗?
EN

Stack Overflow用户
提问于 2013-08-14 09:03:37
回答 3查看 1.2K关注 0票数 1

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

我的脚步,

  1. 使用Qt控制台模板创建项目
  2. 创建以下代码

代码语言:javascript
复制
#ifndef MYEVENT_H
#define MYEVENT_H

#include <QEvent>
#include <QObject>

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

signals:

public slots:
};

#endif

代码语言:javascript
复制
//CPP File
MyEvent::MyEvent() :
    QEvent(QEvent::User)
{
}

代码语言:javascript
复制
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 10.8.4

我怎么解决这个问题?为什么?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-14 09:13:11

达布尔给出了直截了当的回答。

您的错误是QEvent没有继承QObject,而是尝试这样做。您不应该使用Q_OBJECT宏,或者您也应该将类与QObject交互。但这是黑暗面。

票数 4
EN

Stack Overflow用户

发布于 2013-08-14 09:12:46

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

第二个问题是Q_OBJECT宏。QEvent不是一个QObject,所以这个宏不适用,这就是为什么您有这个错误。

票数 2
EN

Stack Overflow用户

发布于 2013-08-14 09:33:54

正如已经指出的:没有Q_OBJECT。但是,让我添加一些内容,并提醒您注意一个很少使用且未知的宏:Q_GADGET

几乎是非Q_OBJECTQObjects

来自:

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

不时地派上用场。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18227398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档