# Kapitel 8. Definition der Dokumente

Der erste Schritt beim Erstellen einer Applikation, die auf dem Document-View Modell basiert, sollte immer sein, sich zu überlegen, welche Arten von Daten die Anwendung verwalten muß. Dies entscheidet, wie die View Klasse aussehen wird, aber insbesondere, wie die Dokumentklasse Daten in und aus Dateien lesen und schreiben wird und welche Methoden angeboten werden, um die Daten zu manipulieren. Da KScribble eine einfache Zeichenanwendung sein wird, die mit graphischen Daten umgeht, werden wir die Qt Klasse `QPixmap` dazu verwenden, unsere Daten zu speichen während wir editieren. `QPixmap` bietet auch einfache Methoden, Bilder in und aus Dateien zu lesen und zu schreiben, so daß die Serialisation mit zwei Zeilen erreicht werden kann, eine zum Lesen und eine zum Schreiben. Weiterhin müssen wir einen Stift definieren, der in ein Dokument schreibt, seine Breite und Farbe einstellen und der View Klasse ermöglichen, den Stift anzusprechen - tatsächlich wollen Sie, daß die Ansicht die Zeichenmethoden anbietet, aber das Dokument als zentrales Element für alle Ansichten, muß das Original des Stiftes besitzen, da sonst verschiedene Ansichten desselben Dokuments verschiedene Stifte verwenden würden!

Daher fügen wir zur Definition der Arbeitsweise unserer Dokumentklasse eine Instanz von `QPixmap` und eine von `QPen` hinzu und editieren die Methoden `newDocument()`, `openDocument()` und `saveDocument()`.

# 8.1. Hinzufügen der Instanzen

Öffnen Sie die Datei `kscribbledoc.h` durch Auswahl in einer der Baumansichten oder durch einen Klick in der Klassenansicht über `KScribbleDoc`. Dann fügen Sie die mit -> markierten Zeilen aus dem folgenden Codeausschnit hinzu:

       1 ->  #include <qpixmap.h>
       2 ->  #include <qpen.h>
       3
       4     class KScribbleDoc
       5     {
       6
       7 ->    	protected:
       8
       9 ->        QPen currentPen(){ return pen;};
      10
      11 ->    		int penWidth()
      12 ->    			{ return pen.width(); }
      13
      14       public slots:
      15         void updateAllViews(KScribbleView *sender);
      16
      17     	protected:
      18
      19 ->    		QPixmap buffer;
      20
      21       private:
      22 ->    		QPen pen;
      23         /** the modified flag of the current document */
      24         bool modified;

Wie Sie sehen, haben wir pen und buffer, sowie `currentPen()` und `penWidth()` hinzugefügt. Da pen als private deklariert ist, bieten wir ein Möglichkeiten sowohl auf den Stift selber, als auch auf die Stiftbreite zuzugreifen. Da diese bereits in der Klassendeklaration implementiert sind, müssen wir sie nicht der Implementationsdatei hinzufügen, der wir uns nun zuwenden.