Seite 1 von 3
[gelöst] Eigene Public Slots funktionieren nicht!
Verfasst: 18. April 2006 22:35
von TheDON
Hallo Zusammen!
Habe mich ein bisschen rumgesehen und konnte feststellen, dass hier alles Qt Profis vorhanden sind! Cool!
Dann kann mir sicherlich jemand bei diesem Problem weiterhelfen.
Und zwar funktionieren meine eigene Public Slots nicht!
Ein paar Beispiele:
Wenn ich folgendes mache:
Code: Alles auswählen
QObject::connect(btn_EintragEntfernen, SIGNAL(clicked()), btn_Suchen, SLOT(hide()));
dann geht das wunderbar! ...ich verwende hier nämlich als Slot "hide()".
Wenn ich jetzt aber folgendes mache:
Code: Alles auswählen
QObject::connect(btn_EintragHinzufuegen, SIGNAL(clicked()), this, SLOT(onEintragHinzufuegenClicked()));
Dann passiert schlicht und einfach NICHTS!!
Was mache ich denn falsch??
Ich habe schon mehrere Male Eigene Slots erstellt und diese funzten auch.
Nun habe ich mir aber die Qt 4.1.1 Version installiert und diese mit vc2005 verbastellt und nun geht es nicht mehr...
(vorher hatte ich mingw als compiler... besteht vielleicht ein Problem mit MS vc2005??)
Erstellt habe ich das GUI mit dem Designer... aber sollte keine Rolle spielen...
Kann mir jemand weiterhelfen??
Jungs, besten Dank für eure Hilfe!!
Gruss,
TheDON
Verfasst: 18. April 2006 22:42
von upsala
Nichts, gibt es nicht. Wenn es nicht funktioniert gibt es sicher irgendwo eine Fehlermeldung

m Zweifelsfalle auf der Konsole...)
Verfasst: 19. April 2006 08:16
von TheDON
Hallo Upsala!
Besten Dank für deine Antwort!
Ja, du hast recht! Das Problem bei Signals und Slots ist aber, dass keine Fehlermeldung sowie keine Warnung ausgelöst wird!
Sogar wenn du einen nicht existenten Slot oder Signal verwendest.
Ich kann dir aber garantieren, dass keine Schreibfehler vorliegen...
Habe es mehrmals abgecheckt.
Syntaxmässig sieht auch alles gut aus, wie du erkennen kannst...
Das Problem liegt schlicht und einfach daran, dass der connect mit dem eigenen Slot nicht tut... keine Ahnung aber wieso...
Any other hints??
Danke!
TheDON
Verfasst: 19. April 2006 08:23
von macman
TheDON hat geschrieben:Das Problem bei Signals und Slots ist aber, dass keine Fehlermeldung sowie keine Warnung ausgelöst wird!
Klar gibt es eine Meldung, die sagt sogar aus, ob es das Signal oder den Slot nicht gibt. Die Meldung kommt aber nicht beim compilieren, sondern erst beim debuggen. Setze vor den connect einen Breakpoint und step dann drüber. Dann solltest Du eigentlich sehen woran es hapert. Meist ist eine falsche Deklaration daran schuld. Die steht dann unter private: oder public:, anstatt unter private slots: oder public slots:
Verfasst: 19. April 2006 08:56
von TheDON
Hallo macman!
Vielen Dank für den Hinweis!
OK werde ich versuchen...
Gebe später nochmals bescheid!
Bis dann...
Gruss,
TheDON
Verfasst: 19. April 2006 09:42
von Nassian
Das Projekt mit der Option debug (CONFIG += debug) übersetzen und du siehst auf der Konsole die besagten Warnungen.
Verfasst: 19. April 2006 12:52
von Alci
Hi,
onEintragHinzufuegenClicked():
Ist das dein definierter SLOT? Das was mir jetzt spontan einfällt ist, dass die definition deines SLOT's nicht richtig ist. Du könntest ja mal den Ausschnitt posten, wo der SLOT definiert wird.
MfG, Alci.
Verfasst: 19. April 2006 15:16
von Nassian
Er kann doch seine Slots nennen wie er möchte!?!
Verfasst: 19. April 2006 17:40
von Alci
Er kann doch seine Slots nennen wie er möchte!?!
Ach ne, wirklich? Habe ich das Gegenteil behauptet?
Ich will nur sehen, ob er sein Slot auch wirklich richtig definiert hat.
Verfasst: 19. April 2006 22:15
von TheDON
Hallo Jungs!
Sorry wenn ich erst jetzt antworte...
aber hatte heute keine Zeit zu testen.. muss nun das mit dem Debugger anschauen... gebe danach bescheid.
Zu Alci:
Hier ist die definition im Header gui.h:
Code: Alles auswählen
public slots:
// QActions on Menubar
void onDiktionaerOeffnenSelected();
void onNeuesDiktionaerErstellenSelected();
void onBestehendesDiktionaerLoeschenSelected();
void onBeendenSelected();
void onHilfethemenSelected();
void onAboutSelected();
// QPushButtons
void onEintragHinzufuegenClicked();
void onEintragEntfernenClicked();
void onAenderungenSpeichernClicked();
void onGesamtesDiktionaerAnzeigenClicked();
void onSuchenClicked();
Wie gesagt... kriegs im Moment nicht hin...
also bis dann jungs!! Und danke nochmals!! sehr nett von euch allen!!

Verfasst: 19. April 2006 23:33
von TheDON
Hey Jungs!!! Ich habe die Ursache gefunden!!!
Besten Dank an Nassian für den Debug Tip
Also.. schaut Mal... das kommt beim Debugger heraus:
Code: Alles auswählen
Object::connect: No such slot QMainWindow::onEintragHinzufuegenClicked()
Object::connect: (sender name: 'btn_EintragHinzufuegen')
Habt ihr gesehen??? Er will einen Slot connecten der Klasse QMainWindow!! Und nicht MEIN SLOT, also von der Klasse GUI!!
Wieso denn das??
Ich habe dann folgendes versucht:
SLOT(GUI::onEintragHinzufuegenClicked())
Auch das leider ohne Erfolg!
Der Debugger sagte dann:
Code: Alles auswählen
Object::connect: No such slot QMainWindow::GUI::onEintragHinzufuegenClicked()
Object::connect: (sender name: 'btn_EintragHinzufuegen')
Dies bedeutet er WILL ZWINGEND den Slot von der Klasse QMainWindow holen!!
Wieso denn?? Es kann doch nicht sein, dass nur weil ich meine Klasse GUI von QMainWindow erbe, dass er dann meine eigene public / private slots nicht mehr akzeptiert...
Ist sicher was dummes....
Hier noch einen Auszug aus meiner gui.h Datei:
Code: Alles auswählen
class GUI : public QMainWindow
{
public:
void setupGUI();
void retranslateGUI(QWidget *parent);
public slots:
// QActions on Menubar
void onDiktionaerOeffnenSelected();
void onNeuesDiktionaerErstellenSelected();
void onBestehendesDiktionaerLoeschenSelected();
void onBeendenSelected();
void onHilfethemenSelected();
void onAboutSelected();
// QPushButtons
void onEintragHinzufuegenClicked();
void onEintragEntfernenClicked();
void onAenderungenSpeichernClicked();
void onGesamtesDiktionaerAnzeigenClicked();
void onSuchenClicked();
Jungs.... über jeden Hinweis wäre ich Dankbar!!
Danke und bis später...
TheDON
Verfasst: 20. April 2006 00:42
von dumpfbacke
O.o
Verfasst: 20. April 2006 07:26
von macman
TheDON hat geschrieben:Hier noch einen Auszug aus meiner gui.h Datei:
Hast Du das Q_OBJECT Makro raus gekürzt oder steht es da wirklich nicht drin? Da gehört nämlich eins rein, sonst erkennt Qt deine Slots nicht.
Verfasst: 20. April 2006 09:17
von Alci
Jep, das Q_OBJECT Macro fehlt.
Habe es mir fast gedacht, daher wollte ich deinen Code mal sehen.
Bei dir müsste es dann wie folgt ausschauen, damit das ganze funktionieren soll:
class GUI : public QMainWindow
{
Q_OBJECT
public:
void setupGUI();
void retranslateGUI(QWidget *parent);
public slots:
// QActions on Menubar
void onDiktionaerOeffnenSelected();
void onNeuesDiktionaerErstellenSelected();
void onBestehendesDiktionaerLoeschenSelected();
void onBeendenSelected();
void onHilfethemenSelected();
void onAboutSelected();
// QPushButtons
void onEintragHinzufuegenClicked();
void onEintragEntfernenClicked();
void onAenderungenSpeichernClicked();
void onGesamtesDiktionaerAnzeigenClicked();
void onSuchenClicked();
Verfasst: 20. April 2006 09:34
von TheDON
Hallo Jungs!
Besten Dank!
Ja, hatte ich bereits probiert aber wenn ich das Q_OBJECT Macro einfüge dann habe ich nur Linkerfehlermeldungen
Ich habe jedoch gelesen, dass man in Verwendung von Q_OBJECT die "moc" Datei erstellen muss... ich wusste wie das funktioniert mit mingw als compiler... aber kann mir in diesem Fall jemand helfen mit vc2005?? Das wäre cool danke!!
...einfach eine Kurze step-by-step guide!
Danke jungs!!!
Gruss,
TheDON