Anzeige:
Ergebnis 1 bis 2 von 2

Thema: QPtrList temporär bearbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.10.2003
    Beiträge
    42

    QPtrList temporär bearbeiten

    Ich hab so'n... naja kein richtiges Problem, aber ich bin mir nicht so ganz sicher ob es für dass was ich machen will eine einfache Möglichkeit gibt.

    Also ich hab eine Klasse die alle Einstellungen des Programms ausliest, in Objekten speichert und beim beenden wieder speichert. Die Einstellungen werden dabei Teilweise in QPtrList's gespeichert.

    Der Einstellungs-Dialog meines Programms holt sich die Einstellungen aus dieser Klasse, und zwar in Form von Zeigern auf die QPtrList's.

    Das Problem ist jetzt dass der Einstellungsdialog die Objekte natürlich nicht richtig bearbeiten soll, sondern nur Temporär, weil die Einstellungen ja nur gespeichert werden sollen, wenn der User danach auf OK (und nicht auf Abbrechen) drückt.

    Eine Möglichkeit wäre jetzt, die QPtrList komplett zu kopieren. Aber wie? Eine Kopie der QPtrList reicht ja nicht, sondern auch die Objekte müssen kopiert werden. Und das nächste Problem ist, wie kopiere ich Zeiger-Objekte? Wenn ich einem Zeiger einen anderen zuweise, wird nur der Zeiger kopiert, und nicht das Objekt, ich will aber dass das komplette Objekt kopiert wird.

    Wenn ich folgendes mache:
    Code:
    Klasse zeiger1;
    Klasse* zeiger2;
    
    zeiger1 = .....;
    
    zeiger2 = &(*zeiger1);
    Zeigt zeiger2 dann auf das gleiche Objekt wie zeiger1, oder ein anderes?

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du kannst die Objekte über den Copykonstruktor kopieren.

    Code:
    Klasse* neuerZeiger = new Klasse(*alterZeiger);
    Wenn deine Datenklassen dynamischen Speicher beinhalten, solltest du den Copykonstruktor überladen.
    Code:
    Klasse::Klasse(const Klasse& original)
    {
        // Elemente von original hierher kompieren
        // bei dynamischen Speicher entsprechend aufpassen
    
        zahl = original.zahl; // zahl zb ein int
    
        zahlPointer = new int(); // neuen Speicher reservieren
        *zahlPointer = *original.zahlPointer; // inhalt kopieren
    }
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •