【问题标题】:Q_OBJECT generates many errorsQ_OBJECT 产生许多错误
【发布时间】:2013-11-22 07:34:20
【问题描述】:

这个类没问题:

#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] 错误:在此上下文中

  • ...

【问题讨论】:

标签: c++ qt qobject


【解决方案1】:

根据文档QGraphicsPixmapItem 不是QObject,因此您不能将其视为是。我会尝试扩展您的类继承并执行以下操作:

class LiveImageItem : public QObject, public QGraphicsPixmapItem
{

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

【讨论】:

  • QObject 或 QGraphicsObject
【解决方案2】:

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

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

class LiveImageItem : public QGraphicsObject
{
    Q_OBJECT

    public:


    private:
        QPixmap m_pixmap;
};

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

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 2012-10-30
    • 1970-01-01
    • 2012-04-06
    • 2013-10-08
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多