Eigenes Signal deklariert, aber "no such signal" bei Ausführung
-
Nun bin ich wieder an einem Punkt, an dem ich nicht weiterkomme. Ich habe in meinem Testprogramm mehrere Fenster, die auch gleichözeitig laufen. Alles gut bis hier.
Nun habe ich ein Signal definiert. Der Kompiler meckert auch nicht, also ist es auch da. Das Problem liegt wohl wieder in connect(). Hier einmal die relevanten Teile:
#ifndef TEST_H #define TEST_H #include <QtGui/QMainWindow> #include "ui_test.h" #include "options.h" namespace GUI { class Test : public QMainWindow { Q_OBJECT public: Test(QWidget *parent = 0, Qt::WFlags flags = 0); ~Test(); private: Ui::TestClass MainWin; //... private slots: //... void UnhideSlot(GUI::Test *Parent, bool State); signals: void UnHide(GUI::Test *Parent, bool State); }; } #endif // TEST_H
#include "stdafx.h" #include "test.h" GUI::Test::Test(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { MainWin.setupUi(this); } //... void GUI::Test::OptionsSlot() { OptionsWin = new Options(); connect(this, SIGNAL(UnHide(*GUI::Test, bool)), OptionsWin, SLOT(OUnhideSlot(*GUI::Test, bool))); OptionsWin->show(); emit UnHide(this, false); } void GUI::Test::UnhideSlot(GUI::Test *Parent, bool State) { if(State==false) this->hide(); else this->show(); }
Options.h und .cpp spare ich mir hier mal, da es analog dazu aussieht. Es ist eine Klasse, mehrfachvererbt von QDialog und OptionsClass (also der QT-Designer Teil).
Es funktioniert auch alles. Das Optionsfenster zeigt sich, beide Fenster reagieren, nur das Signal wird nicht gesendet bzw. kommt nicht an.Wie schon geschrieben denke ich, daß connect() wohl nicht richtig angewendet wird. Aber da ich das Signal ja in der Klasse Test definiert habe, muss ich es doch mit this connecten, oder?
Ich möchte auch keine andere Klasse bauen, damit ich diese dann connecten kann. Es muss doch auch gehen, ein Signal direkt in der selben Klasse zu verbinden, oder?Ich hoffe, jemand kann mir helfen. Wahrscheinlich ist das trivial, aber ich sehe den Fehler nicht. Ich habe es übrigens auch mit einem einfachen Signal ohne Parameter versucht (und analog dazu einen Slot ohne Parameter). Gleiches Ergebnis, da liegt der Fehler wohl nicht.
Grüße,
QTAnfänger
-
Prinzipiell verstanden hast du den connect
Da kommen als Parameter nur die Typen rein, und nicht auch noch ein Name (beliebter Fehler...).Und dann schau dir GENAU an was du geschrieben hast!
connect(this, SIGNAL(UnHide(*GUI::Test, bool)), OptionsWin, SLOT(OUnhideSlot(*GUI::Test, bool)));
TIP:
Den Typ "* Gui::Test" gibt es nicht.
TIP2:
Das "*" ist an der falschen Stelle
-
Öhm manchmal scheine ich mir selbst ein oder zwei Beine zu stellen. Ich hatte es, gerade darum, mit Signal und Slot ohne Parameter versucht (um das als Fehler auszuschließen). Da hatte ich dann wohl etwas in der anderen Klasse nicht richtig angepasst oder einfach nicht richtig gelesen
Das * hatte ich auch an der anderen Stelle. Aber wenn's nicht klappt, dann versuche ich auch unsinnige Dinge...
Danke