qt - slot-verbindungen frage
-
Hi ich verstehe noch nicht ganz das slot prinzip:
ich möchte das in meiner menubar wenn ein bestimmtes feld ausgewählt wird, eine funktion doSomething ausgeführt wird.
Wie müsste da eine connect-Funktion aussehen?
connect(action_feld, SIGNAL(triggered(bool)), ... ??????
was sind empfänger und Slot?
im grunde will ich ja nur eine Funktion doSomething() aufrufen...
in meinem buch verstehe ich das kapitel nicht ganz - leider
-
Der SLOT ist eine Memberfunktion einer von QObject abgeleiteten Klasse. Empfänger ist demnach eine Instanz (genauer: ein Pointer auf so eine Instanz). Kann natürlich auch this sein.
Vor allem darf dein "doSomething" keine freie Funktion sein!!!
Steht aber so eigentlich alles in der Doku, und es gibt so wiele Beispiele wie das aussehen muss.Wenn du immer noch Probleme hast und dein Buch dir nicht hilft (was ich bezweifle) poste mal alle notwendigen Infos. So kann man dir dann eher helfen.
-
ich zeige mal das beispiel das im buch ist:
connect(action_quit, SIGNAL(triggered(bool)), qApp, SLOT(quit()));
schon mein erstes Problem:
quit() wurde schon in einem sehr frühen tutorial benutzt, es muss also schon irgendwie existieren, woher weiß ich was für vordefinierte slots es schon gibt?!Auch SIGNAL(triggered(bool)) muss es schon geben, dazu hatte ich auch in der doc was gefunden... nur die unterschiede zwischen activate und trigger sind mir noch schleierhaft
weiter im text:
connect(action_open, SIGNAL(triggered(bool)), this, SLOT(loadFile)));
was wir hier genau gemacht?
naja auf jeden fall muss ich den slot loadFile bekannt machen...
der qt designer spaltet eine gui mit hauptfenster in 2 teile auf wenn ich das richtig gesehen habeui und mainwindow standardmäßig
ui beinhaltet ja alle buttons und menu-einträge
muss ich dannprotected slots:
void loadFile()zu ui oder mainwindow hinzufügen?
-
shisha schrieb:
quit() wurde schon in einem sehr frühen tutorial benutzt, es muss also schon irgendwie existieren, woher weiß ich was für vordefinierte slots es schon gibt?!
quit ist ein öffentlicher Slot von QApplication. Bei sowas hilft immer ein Blick in die Doku, da sind alle Signale und Slots einer Klasse, auch die geerbten, aufgelistet.
shisha schrieb:
Auch SIGNAL(triggered(bool)) muss es schon geben, dazu hatte ich auch in der doc was gefunden... nur die unterschiede zwischen activate und trigger sind mir noch schleierhaft
activated war es unter qt3, in qt4 wurde daraus triggered
shisha schrieb:
connect(action_open, SIGNAL(triggered(bool)), this, SLOT(loadFile)));
was wir hier genau gemacht?
sendet action_open das Signal triggered, wird die Methode loadFile aus der aktuellen Klasse aufgerufen
der qt designer spaltet eine gui mit hauptfenster in 2 teile auf wenn ich das richtig gesehen habe
ui und mainwindow standardmäßig
ui beinhaltet ja alle buttons und menu-einträge
muss ich dannprotected slots:
void loadFile()zu ui oder mainwindow hinzufügen?
die ui solltest du nicht anfassen. Die wird bei jeder Änderung an der .ui-Datei neu erstellt. Sämtliche Änderungen gehen dabei verloren
Das sollte aber spätestens dann klar werden, wenn man die ui_*-Datei zum Bearbeiten öffnet. Dort steht gleich zuoberst "WARNING! All changes made in this file will be lost when recompiling UI file!"
-
das wäre schonmal recht hilfreich, wenn ich die ui mal anschauen könnte,
wenn ich die öffnen will zeigt er mir immer nur die graphische oberfläsche,
wie kann ich den erzeugten code ansehen?