# 8.3. Implementierung der Serialisation

Was noch zu tun ist, ist zu definieren, wie wir unsere Bilder öffnen und speichern wollen. Dies wird in den entsprechenden Methoden erledigt:

       1     bool KScribbleDoc::openDocument(const QString &&;filename, const char *format /*=0*/)
       2     {
       3
       4     	QFile f( filename );
       5 ->     //if ( !f.open( IO_ReadOnly ) )
       6 ->     //	return false;
       7      /////////////////////////////////////////////////
       8      // TODO: Add your document opening code here
       9 ->     if(!buffer.load( filename, "PNG" ))
      10 ->     	return false;
      11      /////////////////////////////////////////////////
      12 ->     //f.close();
      13
      14
      15     bool KScribbleDoc::saveDocument(const QString &&;filename, const char *format /*=0*/)
      16     {
      17       QFile f( filename );
      18 ->     // if ( !f.open( IO_WriteOnly ) )
      19 ->     // 	return false;
      20
      21       /////////////////////////////////////////////////
      22       // TODO: Add your document saving code here
      23 ->    	if(!buffer.save( filename, "PNG" ))
      24 ->    		return false;
      25       /////////////////////////////////////////////////
      26
      27 ->      //f.close();

Fügen Sie wieder die Zeilen mit dem Pfeil Ihrem Code hinzu. Was wir getan haben, ist die Zeilen, in denen `Dateiname` geöffnet wird, auszukommentieren, weil dies automatisch von den Laden- und Speichermethoden von `QPixmap` erledigt wird, die wir stattdessen hinzufügen. Andere Dokumente mögen Dateien öffnen und deren Inhalt ( Textzeilen oder was auch immer) lesen, weshalb die `QFile` Methoden schon im Frame enthalten sind.Da `save()` und `load()` bei Erfolg einen Boolschen Wert zurückliefern, Geben wir false zurück, wenn nicht, so daß der Rest der Anwendung einen Returnwert erhält und Warnungen ausgibt, wenn die Operation nicht erfolgreich war. Die `load()` und `save()` Methoden sind nun schon in `QPixmap` enthalten. Sie benötigen den Dateinamen und das Format als Argument; die Quellen rufen die Dokument Methoden jedoch noch nicht mit dem Format auf. Wenn nur ein Format verwendet wird, reicht es, dieses hier zu setzen, andere Methoden könnten das Format zum Beispiel ermitteln - aber wir werden später noch einmal darauf zurückkommen. Für jetzt verwenden wir "PNG" als Format; sehen Sie unter `QImageIO` nach, um mehr über Bildformate zu erfahren.

Nun sind wir fast mit der Definition unserer Dokumentstruktur fertig. Der `QPixmap` Puffer dient uns als Speicher für unser Originalbild, während wir daran arbeiten. Der Stift ist gültig für alle Ansichten, die mit dem Dokument verbunden sind. Beachten Sie, daß die Initialisierung des Stiftes in `newDocument` erfolgt. Diese Methode wird immer intern nach dem Konstruktor aufgerufen, Sie sollten also dort die Instanzinitialisierungen vornehmen, wie wir es mit dem Stift gemacht haben.

Im nächsten Kapitel werden wir uns der View Klasse widmen, um zu definieren, wie die Ansicht mit dem Benutzer kooperieren soll und wie sie auf das Dokument zugreift, und dann sind wir bereit zu zeichnen !