Wie kann ich kopieren Objekt in Qt?
Bin ich mit Qt und habe einige grundlegenden Probleme. Ich habe meine eigenen widget MyTest, dass eine variable obj
. Ich brauche, um diese variable obj
von einem Objekt außerhalb des widgets, so dass die variable kopiert nicht einfach nur einen Zeiger auf ein anderes Objekt. Ich bekomme eine Fehlermeldung und kann nicht herausfinden, wie zu tun, diese grundlegende Sachen. Dies ist der code den ich verwende:
MyTest.h:
class MyTest : public QWidget
{
Q_OBJECT
public:
void setObj(QObject &inobj);
QObject obj;
....
}
MyTest.cpp:
void MyTest::setObj(QObject &inobj) {
obj = inobj; //HERE I get the error message: "illegal access from 'QObject' to protected/private member 'QObject::operator=(const QObject &)'"
}
main.cpp:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QObject *ob = new QObject();
MyTest w;
w.setObj(*ob);
}
InformationsquelleAutor Martin | 2010-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es der copy-Konstruktor und Zuweisungsoperator sind deaktiviert. Von diese.
Kein copy-Konstruktor oder Zuweisungsoperator
QObject hat weder ein copy-Konstruktor noch einen Zuweisungsoperator. Das ist by design. Tatsächlich, Sie sind deklariert, aber in einem eigenen Abschnitt mit dem makro Q_DISABLE_COPY(). In der Tat, alle Qt-Klassen, die von QObject (direkte oder indirekte) verwenden Sie dieses makro, um anzugeben, copy-Konstruktor und Zuweisungsoperator privat sein. Die Argumentation ist in der Diskussion über Identität vs-Wert auf die Qt Object Model Seite.
Die wichtigste Konsequenz ist, dass man Zeiger verwenden, um QObject (oder Ihre QObject Unterklasse), wo Sie sonst vielleicht versucht sein, verwenden Sie Ihre QObject Unterklasse als Wert. Zum Beispiel, ohne Kopie-Konstruktor können Sie nicht verwenden Sie eine Unterklasse von QObject als der Wert, der gespeichert werden in einem container-Klassen. Sie müssen speichern Zeiger.
InformationsquelleAutor NG.
Aaron korrekt über die Verwendung der Zuweisungs-operator.
Nur so, dass ich bewusst bin, um eine Kopie von einem Objekt, wenn Sie wirklich müssen, ist, um die Serialisierung zu verwenden, wie beschrieben in der Klasse QDataStream. Dies würde eine Tiefe Kopie des Objekts.
Oder haben Sie sich überlegt, das einwickeln der Klasse als QSharedPointer Zeiger, können Sie sicher vorbeikommen. Dies wäre ein Schatten-oder Referenz-Kopie des Objekts, wenn.
InformationsquelleAutor photo_tom