Signal - Slot

Alles rund um die Programmierung mit Qt
Antworten
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Signal - Slot

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

a) Warum sollte ein Fenster geschlossen werden, nur weil ein LineEdit ausgelesen wird?

b) Möglicherweise, aber nicht mit den vorhandenen Kenntnissen.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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...
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag 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)
{

}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

So, jetzt denken wir mal ein bischen nach, nehmen den Code von Troll.Soft.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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ß.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

@franzf: Doppelter sinnloser connect
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 :)
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag 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?
Newbie
Beiträge: 3
Registriert: 30. Juli 2009 01:01

Beitrag von Newbie »

Indem du das 2. connect weglässt und in setTap w2 nach Bedarf schließt oder eben nicht (?)
Antworten