2013-11-22 3 views
1

Этого класса не проблемы:Q_OBJECT порождает множество ошибок

#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) 
{ 
} 

I t купил каждый объект QT, по существу унаследованный от QObject, поэтому, если я наследую какой-либо подкласс QObject, я мог бы предложить все магические предложения QObject. 2-я версия выше (которая унаследована от, скажем, QGraphicsPixmapItem), кажется доказанной, я был неправ. Оказывается, при компиляции много ошибок, все из moc-файлов (автоматически генерируемых QT). Что происходит?

Некоторые из этих ошибок:

  • [qobject.h] Ошибка: 'QScopedPointer QObject :: d_ptr' является защищен
  • [moc_LiveImageItem.cpp] Ошибка: в этом контексте

  • ...

+0

Я вижу, что вы наследуете от QThread для LiveImageItem ... вы должны прочитать это: http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/ – TheDarkKnight

ответ

4

Согласно документации QGraphicsPixmapItem я s не QObject, поэтому вы не можете относиться к нему так, как если бы он был. Я бы попытаться расширить класс наследование и сделать:

class LiveImageItem : public QObject, public QGraphicsPixmapItem 
{ 

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

QObject или QGraphicsObject – Wagmare

1

Как @vahancho сказал, QGraphicsPixmapItem не QObject. Фактически, это можно сказать о большинстве классов QGraphics * Item.

Однако, если вы хотите использовать сигналы и слоты с классами QGraphicsSystem, вы можете наследовать от QGraphicsObject: -

class LiveImageItem : public QGraphicsObject 
{ 
    Q_OBJECT 

    public: 


    private: 
     QPixmap m_pixmap; 
}; 

Вы бы затем переопределить функцию краски в этом классе и сделать растровое изображение оттуда.

Смежные вопросы