Der derzeite Aufbau sieht so aus, dass ich ein Hauptfenster mit einen Tab-Dialog habe. Auf jeder Tab-Seite befindet sich einen selbst programmiertes Objekt ( sogenanntes QWidget für Qt-Programmieren ). In der letzen Tab-Seite ist ein Textfeld das als Log funktioniert. Für das einlesen der Daten von der seriellen Schnittstelle ist eigenes Objekt( IO-Objekt ) zuständig.
Meine Frage ist, wie muss ich die Objekte verbinden das diese untereinander die Daten austauschen.
z.B. Wenn in der ersten Tab-Seite etwas passiert, dann soll das Objekt einen Eintrag in der letzen Tab-Seite einfügen. Oder wenn die zweite Tab-Seite geöffnet ist dann soll dieses Objekte die Daten vom IO-Objekt einlesen.
Aber wie realisiere ich den Datenaustausch, weil die Objekte wissen nichts voneinander. Meine Vorschlag wäre das ich die Adressen von den Objekten im Hauptfenster-Objekt speichere und das die einzelnen Objekte sich dort die Adresse holen.
Aber ich denke, es gibt doch irgendwie eine elegantere Lösung.
Stark vereinfachter Code des aktuellen Standes:
Code: Alles auswählen
class Hauptfenster(...) : public QWidget
{
public:
Haupfenster(...) : QWidget(...)
{
// Tab-Dialog einfügen
QTabDialog *tabdialog = new QTabDialog(this);
//Objekte einfügen
tabdialog->addTab( ErsteTab( this ));
tabdialog->addTab( ZweiteTab( this ));
tabdialog->addTab( DritteTab( this ));
}
}
class ErsteTab(...) : public QWidget
{
public:
ErsteTab(...) : QWidget(...)
{
//Labels und Buttons einfügen
// Mit einem Timer die Daten vom IODaten holen und in den Labels
// darstellen
}
}
class ZweiteTab(...) : public QWidget
{
public:
ZweiteTab(...) : QWidget(...)
{
//Labels und Buttons einfügen
// Mit einem Timer die Daten vom IODaten holen und in den Labels
// darstellen
}
}
class DritteTab(...) : public QWidget
{
public:
DritteTab(...) : QWidget(...)
{
//Textfeld einfügen
}
void addTextEintrag( char ctext )
{
textfeld->addtext(ctext);
}
}
class IODaten()
{
public:
IODaten()
{
//Schleife starten zum Daten einlesen von der seriellen Schnittstelle
}
int getDaten()
{
return eingelesenDaten;
}
}
Mein Vorschlag soll so auschauen:
Code: Alles auswählen
class Hauptfenster(...) : public QWidget
{
public:
Haupfenster(...) : QWidget(...)
{
// Tab-Dialog einfügen
QTabDialog *tabdialog = new QTabDialog(this);
ersteTab = new ErsteTab( this );
zweiteTab = new ZweiteTab( this );
dritteTab = new DritteTab( this );
tabdialog->addTab( ersteTab );
tabdialog->addTab( zweiteTab );
tabdialog->addTab( dritteTab );
}
IODaten *daten;
ErsteTab *ersteTab;
ZweiteTab *zweiteTab;
Dritte *dritteTab;
IODaten *IOdaten;
}
class ErsteTab(QWidget *parent..) : public QWidget
{
public:
ErsteTab(QWidget *parent,...) : QWidget(...)
{
//Labels und Buttons einfügen
dritteTab = parent->dritteTab;
dritteTab->addTextEintrag("Erste Tag funktioniert");
daten = parent->IOdaten;
}
private:
IODaten *daten;
DritteTab *dritteTab;
}
class ZweiteTab(QWidget *parent..) : public QWidget
{
public:
ZweiteTab(QWidget *parent..) : QWidget(...)
{
//Labels und Buttons einfügen
// Mit einem Timer die Daten vom IODaten holen und in den Labels
// darstellen
daten = parent->daten;
label->text( daten->getDaten );
}
private:
IODaten *daten;
}
Ich hoffe ihr versteht was ich meine. Denn mein Vorschläg ist glaube ich zu Aufwendig und für die Wartung des Programmes sehr schlecht.
Danke im Voraus