Übergabe von daten

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Boushar
Beiträge: 5
Registriert: 28. April 2015 14:04

Übergabe von daten

Beitrag von Boushar » 30. April 2015 13:06

Moin zusammen,
Ich bin in QT, bzw. allg. in der GUI programmierung neu.
Deshalb ist meine Frage wahrscheinlich auch nicht allzu schwer.
Ich kenne es von einer normalen Konsolenapp, dass ich daten zwischen den Unterprogrammen hin u her übergeben kann.
In meinem Programm habe ich eine Klasse "Worker" die Daten vom Objekt sollen nun von meinem Login Fenster in mein
nächstes Fenster übergeben werden.
Ich öffne mein neues Fenster wie folgt:

ui->label->setText("username and password is correct");
//Database connection close
connClose();
this->hide();
//WorkerT ist das neue Fenster und workert das Objekt dazu
WorkerT workert;
workert.setModal(true);
workert.exec();

Ich hoffe ihr versteht was genau meine Frage ist.
MfG
Boushar

veeman
Beiträge: 267
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Übergabe von daten

Beitrag von veeman » 30. April 2015 19:25

-> Setter bzw. Getter Funktionen und dazugehörigen Membervariablen definieren.
mfg veeman

mage-dev

Boushar
Beiträge: 5
Registriert: 28. April 2015 14:04

Re: Übergabe von daten

Beitrag von Boushar » 2. Mai 2015 15:14

aber korrigiere mich wenn ich verkehrt liege.
wenn du in fenster "1" ein objekt der klasse erstellst und dann erstellt man fenster "2".
dann muss ich doch zunächst ein neues objekt der klasse erstellen ?!?
und dann helfen mir die setter und getter funktionen auch nicht so richtig, um die sachen zu übergeben

sowas
Beiträge: 101
Registriert: 19. September 2006 16:02

Re: Übergabe von daten

Beitrag von sowas » 3. Mai 2015 10:35

Solche Meldungen gehen über die QMessageBox. Besorge dir ein qt-Buch und gehe es gründlich durch.
Die offiziellen Qt Beispiele setzten gute Grundkenntnisse voraus. Es ist viel Arbeit.

veeman
Beiträge: 267
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Übergabe von daten

Beitrag von veeman » 3. Mai 2015 14:19

Wenn du Daten zwischen zwei Fenster übergeben möchtest brauchst du jeweils eine Referenz auf das andere Fenster. Diese übergibt man nun mal entweder direkt im Konstruktor mit oder mit Setter Funktionen.

In deinem Codeschnippsel machst du das erste Fenster unsichtbar und erstellst ein zweites das Modal und in einer "eigenen" Eventloop läuft.
Die Frage die sich hier stellt ist warum? Ein Modales Fenster wird normalerweise mit einem Parent erstellt welches sichtbar jedoch blockiert sein soll, solange das zweite Fenster offen ist.
Willst du das? Ansonsten warum wird das vorherige Fenster unsichtbar gemacht....

Dialog mit Parent und Datenaustausch:

Code: Alles auswählen

QMyDialog *widget = new QMyDialog(this);
widget->setData(this->value);
widget->exec();                                   // Vorheriges Fenster Blockieren bis dieses geschlossen ist
this->value = widget->getData();
widget->deleteLater();                            // Da nicht mehr benötigt automatisch entfernen lassen
mfg veeman

mage-dev

Boushar
Beiträge: 5
Registriert: 28. April 2015 14:04

Re: Übergabe von daten

Beitrag von Boushar » 3. Mai 2015 15:25

habt ihr eine emphelung für ein gutes qt buch?

sowas
Beiträge: 101
Registriert: 19. September 2006 16:02

Re: Übergabe von daten

Beitrag von sowas » 3. Mai 2015 17:39

Ein aktuelles deutsches Qt5 Buch gibt es nicht.
Das beste Qt4 Buch war "C++ GUI Programming with Qt4 (2nd Edition)"
von Jasmin Blanchette and Mark Summerfield.
Obwohl es für Qt4 geschrieben wurde, ist der Unterschied zwischen Qt4
und Qt5 nicht sehr groß, nur die neuen Klassen und Funktionen werden
nicht berücksichtigt. Es gibt auch eine deutsche Übersetzung hiervon.
Eine Übersicht über sämtliche Bücher findet man bei https://wiki.qt.io/Books
Interessant scheint das Buch "Qt 5 Cadaques" zu sein, es wird auch übersetzt.

RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Übergabe von daten

Beitrag von RHBaum » 4. Mai 2015 08:22

habt ihr eine emphelung für ein gutes qt buch?
Ist nicht böse gemeint, aber auf Grund der Art der Fragestellung würd ich zuerst doch ein C++ buch empfehlen.
Beim Datenaustausch zwischen Klassen, spielen Aggregation, Composition, die ganze Lifecyclethematik und Abhängigkeitsmanagment mit rein, was quasi tiefstes C++ und Design ist.
Datenklassen wo man mehrere Verbraucher, Views, Observer oder wie man die auch immer nennen will, sollt man schon beherschen, das hat nix mit Konsole vs. Gui zu tun.

Ich kenn kein gutes Buch, für C++ Grundlagen und kleinwenig Design behandelt und gleichzeitig nen gutes Buch für Qt ist.
Für C++ kannst hier mal schauen
https://www.c-plusplus.net/forum/251551

Für Qt ists schwer was zu empfehlen ...
Nachschlagewerk - ist die onlinehilfe ganz ok
Fürn einstieg sind die Online tutorials da auch ned verkehrt.

Designtechnisch für dein konkretes Problem gibts mehrere "lösungen".
Welche die bessere ist, hängt von deinem Anwendungsfall ab ....
DU kannst die Datenklassen direkt in die Fenster hängen (designtechnisch der schlechteste Weg, aber für kleine eher "unprofessionelle" Dinge ganz ok)
Du kannst Datenstruktur neben deinen Fensterklassen erzeugen und die fensterklassen direkt via Zeiger (getter / setter ) mit der Datenklasse Füttern lassen.
Du kannst zwischen Fensterklassen und Datenklassen Adapter (Model/Controller) hängen ...
DU kannst Datenklasse und Fensterklasse auch total unwissend voneinander und ohne speziellen Adapter voneinander betreiben ... dazu nutzt man den Signal/Slot Mechanismus zum datenaustausch.

Bei Datenbank / zwingenden Login zeugs geht man oft aso vor ...

- Man erzeugt den Adapter für die Connection vor der ersten Fensterklasse in der App
- Wenn das Hauptfenster erzeugt wird, gibt man der den Zeiger auf den Adapter mit (via Kosntruktor oder via setter) , oder verdrahtet das via Slots
- in ner init methode des Hauptfensters, wenn das fertig gezeichnet ist ... checkt man die connection (via adapter) und fragt ggf. die credentials noch mal mittels einem modalen dialog ab. alternativ fährt man einen "unconnected" mode und bietet nen button dann zum anmelden an ...

Mit sowas ists dann auch ganz einfach, sich anmeldedaten zu merken (Qsetting oder so) und automatisch ohne Logindialog zu starten ...

Ciao ...


Ciao ...

Antworten