Seite 1 von 1

Signal - Slot

Verfasst: 25. April 2010 19:44
von Nvidia
Hallo,
a)
man kann über Signal/Slot dinge mit einander verbinden über connect.
Also ich hab einen PushButton und möchte wenn er gedrückt wird eine LineEdit auslesen und als QString speichern.
Das ist weiter kein problem. Aber wie teile ich jetzt der Methode(in der sich der Pushbutton befindet mit), dass er z.b. wenn LineEdit leer ist nicht das Fenster schließen soll? Kann man dem PushButton mitteilen, ob es geklappt hat? oder brauch ich da was anderes als connect.
b)
Ich hab eine TabWidget und ich möchte z.b. wenn man oben auf den Tabnamen klickt, dass sich der Name in ein LineEdit verändert und man einen neuen Namen eingeben kann.
Kann man so was hinbekommen?

Verfasst: 25. April 2010 19:59
von upsala
a) Warum sollte ein Fenster geschlossen werden, nur weil ein LineEdit ausgelesen wird?

b) Möglicherweise, aber nicht mit den vorhandenen Kenntnissen.

Verfasst: 25. April 2010 20:26
von Nvidia
die sind hier immer so gut drauf xD
ne das war eine zweite Methode von mir; wenn der Button gedrückt wird führe die Methode mit dem Line Edit lesen aus
dannach schließt er das fenster.
aber wie kann ich ihm sagen, dass er, wenn beim auslesen was nicht passt, das fenster nicht schließen soll.

Verfasst: 25. April 2010 20:41
von franzf
Nvidia hat geschrieben:das fenster nicht schließen soll.
Entweder ist das Verhalten OK, da der Code das so vorgibt, oder dein Code macht Murks und das Programm stürzt ab. Oder es fliegt irgendwo eine Exception.
In allen drei Fällen geht dein Fenster zu. Die Ursache ist nie durch Wahrsagen festzustellen.
Wir haben bisher keinen Code gesehen, nur eine vage Beschreibung, bei der ich mir eigentlich vorgenommen hab nicht zu antworten - ich habs einfach nicht wirklich gepeilt was du treibst :D
Aber wie teile ich jetzt der Methode(in der sich der Pushbutton befindet mit),
aha...

Verfasst: 25. April 2010 20:46
von Troll.Soft
Grafikkarte hat geschrieben:aber wie kann ich ihm sagen, dass er, wenn beim auslesen was nicht passt, das fenster nicht schließen soll.

Code: Alles auswählen

if ( LineEdit hat passenden Inhalt )
        schliessen
else
        nicht schliessen

Verfasst: 25. April 2010 20:54
von Nvidia
void MainWindow::test()
{
createButton = new QPushButton(tr("&Create"));
connect(createButton, SIGNAL(clicked()), this, SLOT(setTapName()));
connect(createButton, SIGNAL(clicked()), w2, SLOT(close()));
}
void MainWindow::setTapName()
{
QString k;
k = lineEdit->text();
createTab(k);
}
void MainWindow::createTab(QString Q)
{

}

Verfasst: 25. April 2010 21:06
von upsala
So, jetzt denken wir mal ein bischen nach, nehmen den Code von Troll.Soft.

Verfasst: 25. April 2010 21:07
von franzf
Kannst du nicht einfach deinen kompletten Code so weit reduzieren, dass dein Problem gerade noch auftritt und sich das Projekt kompilieren lässt, dann tut man sich leichter.

Wenn das nicht geht, poste doch die entscheidenden Teile, dazu gehört in jedem Fall Klassendefinition und Konstruktordefinition. Ich denke ich weiß wo das Problem sein könnte, aber Raten macht mir heute keinen Spaß.

Verfasst: 25. April 2010 21:16
von upsala
@franzf: Doppelter sinnloser connect

Verfasst: 25. April 2010 21:34
von franzf
upsala hat geschrieben:@franzf: Doppelter sinnloser connect
Leider weiß ich nicht was "w2" oder "das Fenster" sind. Genauso wenig ob er nicht im Konstruktor ein weiteres "QLineEdit* lineEdit" erstellt, und damit den Member "lineEdit" uninitialisiert lässt - greif drauf zu und es knallt.
Wenn w2 natürlich "das Fenster" ist, geb ich dir Recht :)

Verfasst: 25. April 2010 22:35
von Nvidia
ok
w2 = Widget das Fenster, welches geöffnet wurde
this = Hauptfenster
lineEdit ist ein LineEdit auf w2
PushButton ist auch auf w2

Wenn der Button gedrückt wird, wird setTap() aufgerufen& das fenster geschlossen.
in setTap könnte ich nach Troll.Soft das testen ob das leer ist. Aber wie sag ich der methode, die setTap aufruft, dass er leer ist und nicht das fenster schließen soll?

Verfasst: 25. April 2010 23:07
von Newbie
Indem du das 2. connect weglässt und in setTap w2 nach Bedarf schließt oder eben nicht (?)