kopierkonstruktor von abgeleitet von QT Klasse
Habe ich eine Klasse, die ist öffentlich, geerbt von QWidget
:
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(const MyWidget& other)
:
obj1(other.obj1),
obj2(other.obj2)
private:
some_class obj1;
some_class obj2;
};
Wenn ich baute mein Projekt, compiler beschwert sich:
ACHTUNG:: Base class "die Klasse QWidget" sollte explizit initialisiert
in den copy-Konstruktor.
Ich habe aus anderen Fragen auf stackoverflow, und habe meine Antwort.
Aber die Tatsache ist, wenn ich fügte hinzu, dass die Initialisierung so:
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(const MyWidget& other)
:
QWidget(other), //I added the missing initialization of Base class
obj1(other.obj1),
obj2(other.obj2)
private:
some_class obj1;
some_class obj2;
};
Bekam ich kompilieren-Fehler:
QWidget::QWidget(const QWidget&) privat ist in diesem Zusammenhang
Also, bitte erklären Sie mir, was ich falsch mache.
- Es scheint, dass
QWidget
ist nicht darauf ausgelegt, kopieren bebaubar, was bedeutet, dass Ihre abgeleiteten Typ sollte nicht sein. - Hast du explizit erstellen Sie eine Kopie Konstruktor für
QWidget
oder Sie überlassen es dem compiler? - Ich weiß nicht brauchen, um eine Kopie-Konstruktor für QWidget. Ich kann nur initialisieren das Objekt Aufruf von QWidget::Cpoy-Konstruktor in der init-Liste von mein Objekt der copy-Konstruktor.
Du musst angemeldet sein, um einen Kommentar abzugeben.
QObject-Klasse Beschreibung Seite sagt :
Das heißt, Sie sollen nicht kopieren QT-Objekte, da QObject ist nicht kopierbar von design.
Die erste Warnung weist Sie zum initialisieren der Basis-Klasse (die QWidget). Wenn Sie dies tun wollen, sind Sie gehen, um zu konstruieren ein neues base Objekt, und ich bezweifle, das ist, was Sie tun möchten.
Der zweite Fehler ist, dir zu sagen, was ich oben schrieb : "nicht kopieren" - qt-Objekte.
Alle Qt-Klassen sind noncopyable durch Ableitung von QObject.
Ist es üblich, in C++ zu verbieten bestimmte Wert-semantische Operationen wie kopieren auf polymorphe Objekte. Qt gibt einige Beispiele für die Probleme, die entstehen würden, wenn kopieren erlaubt war, für QObject in seiner Dokumentation: