这个课没问题:
#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自动生成)。会发生什么?
其中一些错误是:
[moc_LiveImageItem.cpp]错误:在此上下文中
...
答案 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;
};
然后,您将覆盖此类中的绘制函数,并从那里绘制像素图。