2010-04-15 19 views
5

Stavo cercando di ereditare da QGraphicsEllipseItem perché volevo aggiungervi alcune funzionalità. Tuttavia mi sono trovato di fronte a questo errore, che probabilmente ha qualcosa a che fare con il compilatore/precompilatore o il moc?Qt che eredita da QGraphicsEllipseItem

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

Ed ecco il codice della classe:

class MyEllipseItem : public QGraphicsEllipseItem 
{ 
    Q_OBJECT 

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

    } 
}; 

risposta

8

QGraphicsEllipseItem non è QObject, quindi basta togliere Q_OBJECT dalla dichiarazione di classe.

+0

Perfetto, grazie! Sarebbe bello se potessi usare anche una sottoclasse di QGraphicsEllipseItem come QObject, quindi potresti usare segnali e slot con esso. – JHollanti

+0

È ancora possibile utilizzare la composizione per ottenere ciò. Basta aggiungere alla classe l'attributo di qualche tipo, ereditato da QObject. –

+0

Sì, buona soluzione. – JHollanti

1

ho avuto un errore simile quando si eredita da QRunnable che, per il modo NON è un QObject.
Causa

  1. Bad order of inheritence

1

Se tuttavia è necessario utilizzare alcuni slot/segnali nella tua classe si potrebbe ereditare da QObject così come il QGraphicsObject fa

class MyEllipseItem : public QGraphicsEllipseItem, public QObject 
{ 
    Q_OBJECT 

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

    } 
}; 

Può essere una migliore idea di ereditare da QGraphicsObject e reimplementare il disegno dell'ellisse.

Per ulteriori dettagli, consultare QGraphicsObject documentation.

0

in questo caso è necessario solo per provare ereditare il QObject primo, voglio dire:

Ricorda che "ereditarietà multipla richiede QObject essere il primo", altrimenti si otterrà sia lo stesso errore sopra, o qualcosa del tipo "YourClass eredita da due sottoclassi QObject" dal moc.

See this link! per ulteriori informazioni.

ad esempio:

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


// your code... 

}; 

Problemi correlati