Eigenes Object von QGraphicsItem und QObject ableiten

Alles rund um die Programmierung mit Qt
Antworten
sanni
Beiträge: 39
Registriert: 27. Mai 2010 11:53

Eigenes Object von QGraphicsItem und QObject ableiten

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Immer erst von QObject ableiten, dann von den anderen Klassen. Dir ist außerdem klar, daß du QObject 'protected' eingebunden hast?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Da bin ich mir gerade nicht sicher, ich damit auch, daß es nicht 'public' ist, wie wahrscheinlich erwartet wurde.
sanni
Beiträge: 39
Registriert: 27. Mai 2010 11:53

Problemlösung

Beitrag von sanni »

Die Reihenfolge habe ich geändert, und beiden ein public vorangestellt.
Jetzt motzt der Compiler nicht mehr :D
Antworten