Seite 1 von 1
Slots in C++ Code
Verfasst: 2. Oktober 2008 16:09
von gundi_
Hallo Leute,
ich habe einen public Slot in meiner Applikation implementiertt. Ich will diesen Slot im Qt-Designer verwenden. Ich baue das Projekt aber im Qt-Designer kann ich den Slot nicht sehen bzw. nicht wählen. Danach habe ich ins ui-h-File geschaut, da war dieser auch nicht enthalten. Muss dieser nicht autom. in dieses File geschrieben werden.
Wie ist denn der Schritt von der eigenen Appl. zum Qt-Designer.
Ich danke euch!
Verfasst: 2. Oktober 2008 21:12
von solarix
ich habe einen public Slot in meiner Applikation implementiertt.
eine genauere Beschreibung (Klassen, was für ein "public Slot", code, usw.) wäre äusserst hilfreich... (meine Kristallkugel ist wegen Überlast in Reparatur, weswegen Hellsehen z.Z. nicht möglich ist).
Wie ist denn der Schritt von der eigenen Appl. zum Qt-Designer.
http://doc.trolltech.com/4.4/examples.html#qt-designer
Verfasst: 3. Oktober 2008 21:46
von dramen
im designer selber siehst du die eigenen slots nicht, spielt aber nicht wirklich eine rolle, es ist total einfach zu implementieren.
am besten ist du verwendest qdevelop (gibt's für linux und windows). das programm erstellt dir die notwendigen vorlagen.
die eigenen slots musst du allerdings selber implentieren.
in der headerdatei unter private slots:
void meine_funtion();
und in der cpp-datei:
void DialogImpl::meine_funktion() {
// hier dein code z.B.:
textEdit->setText("blabla");
}
... wobei textEdit der Name des mit designer erstellten widgets ist.
wenn du qdevelop verwendest kannst du mit "methode erstellen" meine_funktion() automatisch erstellen lassen.
UND: im Konstruktor:
connect(pushButton,SIGNAL(clicked()),this,SLOT(meine_funktion()));
Verfasst: 6. Oktober 2008 11:12
von gundi_
Ich danke dir.
Ok, ich habe deinen Vorschlag implementiert. Ich mache es etwas komplizierter, weil ich connectNotify verwenden will. Dies habe ich auch implementiert. Wenn eine neue Verbindung/Signal auftritt, wird connectNotify aufgerufen. Ich habe die Funktion überschrieben und kappe in der Funktion die bestehenden Verbindungen.
Aber die connectNotify wird nicht aufgerufen, wenn ich das Programm ausführe.
Wisst ihr warum?
Verfasst: 6. Oktober 2008 11:33
von macman
Tja, ich sehe keinen Fehler.
Verfasst: 6. Oktober 2008 11:55
von gundi_
Es sind ja auch keine Fehler vorhanden. Ich habe folgendes gemacht:
Ich habe einen Pushbutton angelegt (custom widget), der beim Klicken einfach mit cout (Debug) einen Text ausgeben soll. Dafür habe ich den eigenen Slot in der cpp implementiert. Den connect-Aufruf im Konstruktor habe ich weggelassen, da ich den Slot auch im Designer angelegt habe.
Gleichzeitig werden alle Signale, die mit diesem Button verbunden sind, gekappt.
Da ist kein Compiler-Fehler. Sondern einfach Funktionsfehler. Wenn ich den Button anklicke, sehe ich den Text mit dem Aufruf von cout nicht.
Verfasst: 6. Oktober 2008 12:03
von macman
gundi_ hat geschrieben:Da ist kein Compiler-Fehler. Sondern einfach Funktionsfehler.
Ja genau. Und da du noch keinen Code geliefert hast, sehen wir keinen Fehler. Ich kann nur eins empfehlen, vergiss den Designer was connections angeht. Schreib die connects selbst, wenn es eigene Slots angeht, dann kannst Du auch gleich prüfen ob die connects funktionieren. Wenn ein connect nicht zustande kommt, dann wird deine Funktion auch nie aufgerufen.