2010-04-15 2 views
5

Я пытался наследовать от QGraphicsEllipseItem, потому что хотел добавить к нему некоторые функции. Однако я столкнулся с этой ошибкой, которая, вероятно, имеет какое-то отношение к компилятору/прекомпилеру или moc?Qt наследуется от QGraphicsEllipseItem

error: 'staticMetaObject' is not a member of 'QGraphicsEllipseItem' 

А вот код класса:

class MyEllipseItem : public QGraphicsEllipseItem 
{ 
    Q_OBJECT 

public: 
    MyEllipseItem (const QRectF & outline) : QGraphicsEllipseItem(outline) 
    { 

    } 
}; 

ответ

8

QGraphicsEllipseItem не QObject, так что просто удалить Q_OBJECT из объявления класса.

+0

Отлично, спасибо! Было бы неплохо, если бы вы могли использовать подкласс QGraphicsEllipseItem как QObject, так что вы могли бы использовать с ним сигналы и слоты. – JHollanti

+0

Вы все еще можете использовать композицию для достижения этой цели. Просто добавьте в свой класс атрибут некоторого типа, унаследованный от QObject. –

+0

Да, хороший обходной путь. – JHollanti

1

У меня была аналогичная ошибка при наследовании от QRunnable, которая по способу НЕ является QObject.
Причина

  1. Bad order of inheritence

1

Однако, если вам нужно использовать несколько слотов/сигналов в вашем классе вы могли наследовать от QObject, а также как и QGraphicsObject делает

class MyEllipseItem : public QGraphicsEllipseItem, public QObject 
{ 
    Q_OBJECT 

public: 
    MyEllipseItem (const QRectF & outline) : QGraphicsEllipseItem(outline) 
    { 

    } 
}; 

Это может быть лучше идея унаследовать от QGraphicsObject и переопределить рисунок эллипса.

Для получения дополнительной информации проверьте QGraphicsObject documentation.

0

в этом случае вам нужно просто попробовать наследовать QObject Первый, я имею в виду:

Помните, что «Множественное наследование Требуется QObject быть первым», в противном случае вы получите либо ту же ошибку, как выше или что-то вроде строк «YourClass наследует от двух подклассов QObject» от moc.

See this link! для получения дополнительной информации.

, например:

#include<QObject> 
#include<QGraphicsEllipseItem> 
class myclass : public QObject , public QGraphicsEllipseItem{ 
Q_OBJECT 


// your code... 

}; 

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