Datensatz suchen
-
@M-W Du meinst einen "Cancel" Button...
Wenn ich grade die QT Doku richtig verstehe, würde man normalerweise
QInputDialog::getText
ein Pointer auf ein Parent Widget mitgeben.
Bei QT bin ich mir nicht sicher, ob ein Modal Dialog unbedingt einen Parent braucht um sauber aufgeräumt zu werden.Erbt
Suchliste
von einer QT Klasse?
oder, wie istformSuchliste->show();
implementiert?
So wie es da steht, hast du an der Stelle auch einen Memonry Leak, weilSuchliste
nirgends wieder gelöscht wirdSo wie ich das sehe, erstellt der Konstruktor von
Suchliste
denQInputDialog
. Wenn der beendet wird, wirdformSuchliste->show();
aufgerufen und wieder was angezeigt.
-
Hallo Schlangenmensch danke für deine Antwort,
das ist richtig was du schreibst, " wenn beendet wird, wird fromsuchliste->show(); ausgerufen und wieder was angezeigt. Die Klasse Suchliste erbt von Dialog.Klasse erbt von QDialog class Suchliste : public QDialog
Aber ich habe was angepasst den QInputDialog mache ich jetzt in der MainWondows Klasse.
void MainWindow::on_buttonKundeSuche_clicked() { bool ok = false; //wenn eine Verbindung zu Datenbank besteht if (dbVerbunden == true) { QString text = QInputDialog::getText(0, "Datensatz Suchen","Bitte Nachname Eingeben:", QLineEdit::Normal,"", &ok); if (ok && !text.isEmpty()) { //den Dialog anzeigen Suchliste *formSuchliste = new Suchliste(); formSuchliste->show(); }else{ Suchliste *formSuchliste = new Suchliste(); formSuchliste->close(); } } }
Jetzt muss ich nur noch das Attribute vom QString an die andere Klasse übergebe, ich weiß nicht genau ob ich das mit einen Pointer mache oder mit deinjer Membervariablen der Klasse A, dann einen Memberfunktion, die den Wert der Membervariablen zurückgibt
-
Wie sieht denn die Slot-Methode vom "Channel"-Button aus?
Du hast aber ein generelles logisches Problem:
du zeigst im Konstruktor vonSuchliste
denQInputDialog
an und möchtest bei "Abbrechen" oder leerem Text die Suchliste-Form wieder schließen. Da du jedoch erst danachshow()
aufrufst, wird dann in jedem Fall ein leeres Formular angezeigt.Mach daraus eine eigene Methode (mit
bool
als Rückgabewert):Suchliste *formSuchliste = new Suchliste(); if (formSuchliste->ShowInputDialog()) formSuchliste->show();
PS: Dein Beitrag ist (evtl. aufgrund mangelnder Deutschkenntnisse?) schlecht zu lesen. Meinst du statt "Channel" evtl. "Abbrechen" - also "Cancel" im englischen?
-
Ja ich meine Cancel für Abbrechen sorry. Der Cancel Button wird automatisch mit generiert, wenn das QInputDialog erstellt wird.
-
@M-W Dein else Zweig ergibt doch keinen Sinn, Dialog erstellen und direkt wieder schließen. Oder hab ich was verpasst. Außerdem übergibst du immer noch keinen Parent.
@M-W sagte in Datensatz suchen:
Jetzt muss ich nur noch das Attribute vom QString an die andere Klasse übergebe, ich weiß nicht genau ob ich das mit einen Pointer mache oder mit deinjer Membervariablen der Klasse A, dann einen Memberfunktion, die den Wert der Membervariablen zurückgibt
Hier weiß ich wieder nicht, was du genau meinst. Wenn du den String
text
anSuchliste
übergeben willst, kannst du dem Konstruktor einfach einen Parameter verpassen.@Th69 Wenn ich die Doku zu
QInputDialog::getText
grade richtig überflogen habe, hat der Dialog automatisch einen "ok" und einen "cancel" Button. Wenn "Cancel" geklickt wird, wirdok
auffalse
gesetzt.
-
Ja das mit den else zweig habe ich dann auch gemerkt das es kein sinn macht.
-
@Schlangenmensch: ich weiß leider nicht, was du mir sagen willst. ;- )
-
Aber es handelt sich doch um zweit unterschiedliche Klassen, in der Klasse A wird QLinDialog abgefragt und in einer QString Variable der Nachname gespeichert. In der Klasse B befindet sich die Suchliste.
Ich muss doch jetzt die QString Variable von Klasse A mit dem Nachnamen an Klasse B mit de Suchliste übergeben.
-
@M-W Dann mach das doch
-
Es hat geklappt, ich übergebe einfach die Instanz über den Konstruktor der anderen Klasse!
Suchliste *formSuchliste = new Suchliste(text);