2010-04-15 23 views
5

Intenté heredar de QGraphicsEllipseItem porque quería agregarle alguna funcionalidad. Sin embargo, me enfrenté a este error, que probablemente tiene algo que ver con el compilador/precompilador o moc?Qt que hereda de QGraphicsEllipseItem

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

Y aquí está el código de clase:

class MyEllipseItem : public QGraphicsEllipseItem 
{ 
    Q_OBJECT 

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

    } 
}; 

Respuesta

8

QGraphicsEllipseItem no es QObject, por lo que basta con retirar Q_OBJECT de declaración de la clase.

+0

Perfecto, gracias! Sería bueno si pudiera usar una subclase de QGraphicsEllipseItem como un objeto QObject también, por lo que podría usar señales y ranuras con él. – JHollanti

+0

Aún podría utilizar la composición para lograr esto. Simplemente agregue a su clase el atributo de algún tipo, heredado de QObject. –

+0

Sí, buena solución. – JHollanti

1

Sin embargo, si es necesario utilizar algunas ranuras/señales en su clase en la que podían heredar de QObject, así como el QGraphicsObject hace

class MyEllipseItem : public QGraphicsEllipseItem, public QObject 
{ 
    Q_OBJECT 

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

    } 
}; 

Puede ser una mejor idea de heredar de QGraphicsObject y volver a implementar el dibujo de la elipse.

Para obtener más información, consulte QGraphicsObject documentation.

0

en este caso es necesario sólo para tratar de heredar el QObject Primera, quiero decir:

Recuerde que "herencia múltiple Requiere QObject ser el primero", de lo contrario obtendrá ya sea el mismo error que arriba, o algo así como "YourClass hereda de dos subclases QObject" del moc.

See this link! para obtener más información.

por ejemplo:

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


// your code... 

}; 

Cuestiones relacionadas