Seite 1 von 1

Eigenes Object von QGraphicsItem und QObject ableiten

Verfasst: 30. Juni 2010 22:31
von sanni
Ich möchte ein Objekt von QGraphicsellipseItem ableiten, da ich im Objekt sen Signal/Slot - Mechanismus brauche. Deshalb muss auch, um connecten zu können, das Object von QObject abgeleitet werden.
Hier mal (leicht gekürzt) die Header-Datei:

Code: Alles auswählen

class Item : public QGraphicsEllipseItem, QObject{
  Q_OBJECT

public:
  Item( qreal x, qreal y );

private slots:
  void slotTimeLineStart();
  void slotUpdate( qreal t );

private:
  QTimeLine *timeLine;
}
und die Realisierung:

Code: Alles auswählen

Item::Item( qreal x, qreal y ) : QGraphicsEllipseItem( x, y, 8.0, 8.0 ), QObject(){
  setBrush( Qt::red );

  timeLine = new QTimeLine( 1000 );
  timeLine->setLoopCount( 5 );
  connect( timeLine, SIGNAL( valueChanged( qreal ) ),
               this, SLOT( slotUpdate( qreal ) ) );
}


void Item::slotTimeLineStart(){
  timeLine->start();
}


void Item::slotUpdate( qreal t ){
  if( t<0.85 ){
    setVisible( true );
  }else{
    setVisible( false );
  }
}

Wenn ich das Programm übersetzte bekomme ich vom Compiler folgende Fehlermeldungen:

Code: Alles auswählen

moc_item.cpp: 42: error: 'staticMetaobject' is not a member of 'QGraphicsEllipseItem'
moc_item.cpp: in member function 'virtual void* Item::qt_metacast( const char*)':
moc_item.cpp: 58: error: 'qt_metacast' is not a member of 'QGraphicsEllipseItem'
moc_item.cpp: in member function 'virtual int Item::qt_metacall( QMetaobject::Call, int, void**)':
moc_item.cpp: 63: error: 'qt_metacall' is not a member of "QGraphicsEllipseItem'
Was mache ich hier falsch, bzw. lässt sich das auf intelligentere Weise lösen?

Verfasst: 1. Juli 2010 06:11
von upsala
Immer erst von QObject ableiten, dann von den anderen Klassen. Dir ist außerdem klar, daß du QObject 'protected' eingebunden hast?

Verfasst: 1. Juli 2010 08:47
von franzf
upsala hat geschrieben:Dir ist außerdem klar, daß du QObject 'protected' eingebunden hast?
Default bei Vererbung und Elementen bei class ist doch private, oder?

Verfasst: 1. Juli 2010 09:09
von upsala
Da bin ich mir gerade nicht sicher, ich damit auch, daß es nicht 'public' ist, wie wahrscheinlich erwartet wurde.

Problemlösung

Verfasst: 1. Juli 2010 22:58
von sanni
Die Reihenfolge habe ich geändert, und beiden ein public vorangestellt.
Jetzt motzt der Compiler nicht mehr :D