Konstruktor der abgeleiteten QT-Klasse kopieren

8

Ich habe eine Klasse, die öffentlich von QWidget geerbt wurde:

%Vor%

Wenn ich mein Projekt gebaut habe, beschwert sich der Compiler:

  

WARNUNG :: Die Basisklasse "class QWidget" sollte explizit initialisiert werden   im Kopierkonstruktor.

Ich habe mich bei anderen Fragen zu stackoverflow ausgecheckt und meine Antwort bekommen. Aber Tatsache ist, als ich diese Initialisierung wie folgt hinzugefügt habe:

%Vor%

Ich habe einen Kompilierfehler:

  

QWidget :: QWidget (const QWidget & amp;) ist privat in diesem Kontext

Also, bitte erklären Sie mir, was ich falsch mache.

    
Karen Tsirunyan 30.09.2013, 10:58
quelle

2 Antworten

16

Beschreibung der QObject-Klasse Seite sagt:

  

QObject hat weder einen Kopierkonstruktor noch einen Zuweisungsoperator. Das ist Absicht. Eigentlich sind sie deklariert, aber in einem privaten Bereich mit dem Makro Q_DISABLE_COPY (). Tatsächlich verwenden alle Qt-Klassen, die von QObject (direkt oder indirekt) abgeleitet sind, dieses Makro, um ihren Kopierkonstruktor und ihren Zuweisungsoperator als privat zu deklarieren. Die Argumentation finden Sie in der Diskussion zu Identität und Wert auf der Seite Qt-Objektmodell.

Das bedeutet, dass QT-Objekte nicht kopiert werden sollen, da QObject vom Design nicht kopierbar ist.

Die erste Warnung weist Sie an, die Basisklasse zu initialisieren (was QWidget ist). Wenn Sie dies tun wollen, werden Sie ein neues Basisobjekt konstruieren, und ich bezweifle, dass Sie das tun wollen.

Der zweite Fehler sagt Ihnen, was ich oben geschrieben habe: qt Objekte nicht kopieren.

    
BЈовић 30.09.2013, 11:08
quelle
9

Alle Qt-Klassen sind nicht kopierbar, indem sie von QObject abgeleitet werden.

In C ++ ist es üblich, bestimmte wert-semantische Operationen wie das Kopieren polymorpher Objekte zu verbieten. Qt gibt einige Beispiele für die Probleme, die auftreten würden, wenn copy für QObject in seinem Dokumentation :

  

Ein Qt-Objekt ...

     
  • könnte ein eindeutiges QObject :: objectName () haben. Wenn wir ein Qt-Objekt kopieren, welchen Namen sollten wir der Kopie geben?
  •   
  • hat eine Position in einer Objekthierarchie. Wenn wir ein Qt-Objekt kopieren, wo sollte die Kopie liegen?
  •   
  • kann mit anderen Qt-Objekten verbunden werden, um Signale an sie zu senden oder Signale von ihnen zu empfangen. Wenn wir ein Qt-Objekt kopieren, wie sollen wir es tun   Übertrage diese Verbindungen zur Kopie?
  •   
  • kann zur Laufzeit neue Eigenschaften hinzufügen, die in der C ++ Klasse nicht deklariert sind. Wenn wir ein Qt-Objekt kopieren, sollte das kopieren   die Eigenschaften hinzufügen, die dem Original hinzugefügt wurden?
  •   
    
ComicSansMS 30.09.2013 11:11
quelle

Tags und Links