Das K Desktop Environment

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 !