Seite 1 von 1

Probleme mit QObject in Vererbungshierarchie

Verfasst: 10. Oktober 2007 09:56
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.

Verfasst: 10. Oktober 2007 10:13
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