Das K Desktop Environment

Kapitel 9. Definition der Ansicht

9.1. Interaktion mit dem Benutzer

In diesem Kapitel werden wir uns der View Klasse von KScribble zuwenden, um zu definieren, wie die Kindfenster arbeiten sollen. Als erstes sehen wir, daß KScribbleView standarmäßig von QWidget abgeleitet ist. Das ist die Mindestanforderung für ein Kindfenster, aber es reicht bereits für unsere Bedürfnisse aus. Wenn es darum geht, das Verhalten eines neuen Widgets zu definieren, müssen wir wissen, wie der Benutzer mit dem Fenster interagieren soll. In unserem Beispiel, soll dies offensichtlich mit Hilfe der Maus geschehen. Daher müssen wir einige virtuelle Methoden von QWidget überschreiben, die die Mausereignisse verarbeiten die unser Widget empfängt. Was wir wissen müssen ist, wann der Benutzer eine Maustaste drückt, weil nur gezeichnet werden soll, wenn eine Maustaste gedrückt ist. Außerdem müssen wir wissen, wann die Maus bewegt wird (und wohin), sowie den Zeitpunkt, zu dem die Maustaste losgelassen wird, da dann der Zeichenzug beendet ist. Weiterhin wollen wir, daß unser Bild im Fenster gezeichnet wird und seine Größe angepasst wird, wenn der Benutzer sich entschließt, das Fenster in der Größe zu verändern. Wir werden auch ein Member QPointArray und einen boolschen Wert mousePressed hinzufügen. Fügen Sie den, mit dem Pfeil gekennzeichneten Code, Ihrer Klasse KScribbleView hinzu:

   1    kscribbleview.h
   2 
   3 ->   #include <qpointarray.h>
   4 
   5     class KScribbleView
   6     {
   7     .
   8     .
   9      protected:
  10         virtual void closeEvent(QCloseEvent* );
  11 
  12 ->     	virtual void mousePressEvent( QMouseEvent * );
  13 ->     	virtual void mouseReleaseEvent( QMouseEvent * );
  14 ->     	virtual void mouseMoveEvent( QMouseEvent * );
  15 ->     	virtual void resizeEvent( QResizeEvent * );
  16 ->     	virtual void paintEvent( QPaintEvent * );
  17    	
  18    	  KScribbleDoc *doc;
  19      		
  20 ->     private:
  21 ->   		bool mousePressed;
  22 ->   		QPointArray polyline;
  23 
  24      }