Das Fenster zum Wählen der Schnittstelle ist ein Fenster der Anwendung. Es wird beim starten der Anwendung zwei Mal angezeigt und bietet dem Anwender die Möglichkeit, anzugeben, über welche parallele Schnittstelle er die Bewässerungsanlage steuern möchte und über welche serielle Schnittstelle mit dem Modem kommuniziert werden soll.
Zu diesem Zweck enthält das Fenster zwei Buttons: einen zum Auswählen der ersten, den anderen zum Auswählen der zweiten Schnittstelle.
#ifndef __portwahl_h
#define __portwahl_h
#include <qdialog.h>
#include <qlayout.h>
#include <qpushbutton.h>
#include "definitionen.h"
class PortWahl: public QDialog
{
Q_OBJECT
public:
PortWahl (QWidget *parent = NULL, const char *name = NULL, bool modal = TRUE,
WFlags f = 0);
~PortWahl() {}
void init (char *titel, char *label1, char *label2, int res1, int res2);
int ergebnis;
private:
QPushButton *btn1, *btn2;
QBoxLayout *formlayout;
int ergebnis1, ergebnis2;
private slots:
void btn1clicked ();
void btn2clicked ();
};
#endif
#include "portwahl.h"
PortWahl::PortWahl (QWidget *parent, const char *name, bool modal, WFlags f)
:QDialog (parent, name, modal, f)
{
btn1 = new QPushButton (this);
btn2 = new QPushButton (this);
formlayout = new QBoxLayout (this, QBoxLayout::Down, 10, 10);
formlayout->addWidget (btn1);
formlayout->addWidget (btn2);
connect (btn1, SIGNAL(clicked()), this, SLOT(btn1clicked()));
connect (btn2, SIGNAL(clicked()), this, SLOT(btn2clicked()));
formlayout->activate();
}
void PortWahl::btn1clicked()
{
ergebnis = ergebnis1;
accept();
}
void PortWahl::btn2clicked()
{
ergebnis = ergebnis2;
accept();
}
void PortWahl::init (char *titel, char *label1, char *label2, int res1, int res2)
{
setCaption (titel);
btn1->setText(label1);
btn2->setText(label2);
ergebnis1 = res1;
ergebnis2 = res2;
}
Die Klasse PortWahl ist von der Qt - Dialogklasse QDialog abgeleitet und ist somit selbst eine Dialogklasse. Sie erhält einen öffentlichen Konstruktor, Destruktor und eine Methode zum Setzen der Beschriftungen und der Rückgabewerte sowie zwei private Buttons und ein Layout - Objekt, das für die Anordnung der Buttons im Fenster sorgt. Die Klasse erhält weiters zwei private Slots, die durch die zwei Buttons aktiviert werden können
Im Konstruktor der Klasse werden die Unterobjekte angelegt und initialisiert. Durch die connect - Befehle werden die Klick - Signale der zwei Buttons mit den entsprechenden privaten Slots verbunden.
Die privaten Slots btn1clicked() und btn2clicked() sind im Wesentlichen identisch. Sie setzen zuerst den der jeweiligen Taste entsprechenden Rückgabewert und sorgen dann durch den Aufruf des Slots accept() dafür, dass das Dialogfenster wieder verborgen wird.