Probleme mit QObject in Vererbungshierarchie

Alles rund um die Programmierung mit Qt
Antworten
rage
Beiträge: 11
Registriert: 24. Juli 2007 18:40
Wohnort: Berlin
Kontaktdaten:

Probleme mit QObject in Vererbungshierarchie

Beitrag von rage »

Ich habe ein Problem mit meiner Objekthierarchie. Ich habe eine Oberklasse "Geometry" von der die Klassen "Point", "LineString", ... erben. Alles funktioniert ohne Probleme, allerdings will ich nun von den Child-Objekten Signale auslösen und muss ja somit QObject einbinden. Dies habe ich in der Oberklasse "Geometry" gemacht.

Code: Alles auswählen

class Geometry : public QObject
{
Q_OBJECT
public:
Geometry(QString name = QString());
...
}
Beim kompilieren kommt nun allerdings folgender Fehler:

Code: Alles auswählen

/usr/include/QtCore/qobject.h:287: error: 'QObject::QObject(const QObject&)' is private
src/geometry.h:31: error: within this context
src/point.h: In copy constructor 'Point::Point(const Point&)':
src/point.h:31: note: synthesized method 'Geometry::Geometry(const Geometry&)' first required here 
/usr/include/QtCore/qlist.h: In member function 'void QList<T>::append(const T&) [with T = Point]':
/usr/include/QtCore/qlist.h:419: note: synthesized method 'Point::Point(const Point&)' first required here 
/usr/include/QtCore/qobject.h: In member function 'Geometry& Geometry::operator=(const Geometry&)':
src/geometry.h:31: instantiated from 'void QList<T>::node_construct(QList<T>::Node*, const T&) [with T = Point]'
/usr/include/QtCore/qlist.h:417: instantiated from 'void QList<T>::append(const T&) [with T = Point]'
src/linestring.cpp:68: instantiated from here
/usr/include/QtCore/qobject.h:287: error: 'QObject& QObject::operator=(const QObject&)' is private
src/geometry.h:31: error: within this context
src/point.h: In member function 'Point& Point::operator=(const Point&)':
src/point.h:31: note: synthesized method 'Geometry& Geometry::operator=(const Geometry&)' first required here 
/usr/include/QtCore/qlist.h: In member function 'void QList<T>::node_construct(QList<T>::Node*, const T&) [with T = Point]':
/usr/include/QtCore/qlist.h:332: note: synthesized method 'Point& Point::operator=(const Point&)' first required here 
gmake: *** [linestring.o] Error 1
*** Exited with status: 2 ***
Nun habe ich gelesen, dass man keine Kopien von solchen erbenden Klassen erstellen darf, da der QObject copy constructor private ist. Heißt das, wenn ich mit Pointern arbeite funktioniert es?
Dies war mit bisher nie so bewußt, denn die komplette Objekthierarchie von Qt hat ja dann das selbe Problem... Oben steht QObjekt, dann bspw. QFrame -> QAbstractScrollArea -> QTextEdit

Sind Pointer somit die Lösung, oder gibt es eine bessere Möglichkeit, bei der ich dann auch Kopien von den Child-Objekten erstellen kann.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du hast es richtig erkannt - kein copy ctor (wäre an dieser Stelle schlimm wenn es einen gäbe) und deshalb nur ptr möglich
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten