Q_OBJECT生成许多错误

时间:2013-11-22 07:34:20

标签: c++ qt qobject

这个课没问题:

#include <QThread>

class LiveImageItem : public QThread
{
    Q_OBJECT
public:
    LiveImageItem(QPixmap pimg);

signals:

public slots:

};

但是这个类会遇到与头文件

中定义的“Q_OBJECT”宏相关的问题
#include <QGraphicsPixmapItem>

class LiveImageItem : public QGraphicsPixmapItem
{

    Q_OBJECT //this line will generate many errors in compiling

public:
    LiveImageItem(QPixmap pimg);

signals:

public slots:

};

他们的cpp文件都是一样的:

#include "LiveImageItem.h"

LiveImageItem::LiveImageItem(QPixmap pimg)
{
}

我认为每个QT对象基本上都是从QObject继承的,所以如果我继承QObject的任何子类,我可以拥有QObject提供的所有魔法。上面的第二个版本(继承自QGraphicsPixmapItem)似乎证明我错了。在编译时,结果是有很多错误,都是来自moc文件(由QT自动生成)。会发生什么?

其中一些错误是:

  • [qobject.h]错误:'QScopedPointer QObject :: d_ptr'是 受保护的
  • [moc_LiveImageItem.cpp]错误:在此上下文中

  • ...

2 个答案:

答案 0 :(得分:4)

根据文档QGraphicsPixmapItem不是QObject,因此您无法将其视为原样。我会尝试扩展你的类继承并执行:

class LiveImageItem : public QObject, public QGraphicsPixmapItem
{

    Q_OBJECT //this line will generate many errors in compiling
[..]

答案 1 :(得分:1)

正如@vahancho所说,QGraphicsPixmapItem不是QObject。事实上,大多数QGraphics * Item类都可以这么说。

但是,如果您想在QGraphicsSystem类中使用信号和插槽,则可以继承QGraphicsObject: -

class LiveImageItem : public QGraphicsObject
{
    Q_OBJECT

    public:


    private:
        QPixmap m_pixmap;
};

然后,您将覆盖此类中的绘制函数,并从那里绘制像素图。