Signals und Slots für Dummies :-/
-
coffeejunky24
- Beiträge: 16
- Registriert: 24. April 2006 20:49
- Wohnort: RhPf
- Kontaktdaten:
Signals und Slots für Dummies :-/
Hallo Allerseits!
Ich fange grade an mich mit Qt zu beschäftigen und bin schon am verzweifeln.
Es dreht sich um ganz einfache Signals und Slots Verknüpfungen...
Im Tutorial verknüpft man einen Slider mit einem LCD:
connect(slider, SIGNAL(valueChanged(int)),lcd, SLOT(display(int)));
Klappt auch super....
Ich möchte aber gerne einen PushButton mit dem LCD verknüpfen. Bei jedem clicked() soll der vom LCD angezeigte Wert um 1 steigen.
Irgendwie funktioniert hier aber garnichts..
Solche Sachen habe ich probiert:
connect(plus, SIGNAL(clicked()),lcd, SLOT(display(++int)));
connect(plus, SIGNAL(clicked()),lcd, SLOT(display(++Wert)));
void StdEingabe::on_plus_clicked() {Wert++; lcd->display(Wert);}
Ich scheine komplett daneben zu liegen... Der LCD zeigt immer "0" bzw Wert an und ändert sich nie...
Ich würde mich wirklich freuen wenn sich jemand dazu erbarmen könnte mir das Prinzip nochmal für Dumme zu erklären!!
Danke und viele Grüße, Jan
PS: Falls das relevant ist -> Windows und QT4.1
Ich fange grade an mich mit Qt zu beschäftigen und bin schon am verzweifeln.
Es dreht sich um ganz einfache Signals und Slots Verknüpfungen...
Im Tutorial verknüpft man einen Slider mit einem LCD:
connect(slider, SIGNAL(valueChanged(int)),lcd, SLOT(display(int)));
Klappt auch super....
Ich möchte aber gerne einen PushButton mit dem LCD verknüpfen. Bei jedem clicked() soll der vom LCD angezeigte Wert um 1 steigen.
Irgendwie funktioniert hier aber garnichts..
Solche Sachen habe ich probiert:
connect(plus, SIGNAL(clicked()),lcd, SLOT(display(++int)));
connect(plus, SIGNAL(clicked()),lcd, SLOT(display(++Wert)));
void StdEingabe::on_plus_clicked() {Wert++; lcd->display(Wert);}
Ich scheine komplett daneben zu liegen... Der LCD zeigt immer "0" bzw Wert an und ändert sich nie...
Ich würde mich wirklich freuen wenn sich jemand dazu erbarmen könnte mir das Prinzip nochmal für Dumme zu erklären!!
Danke und viele Grüße, Jan
PS: Falls das relevant ist -> Windows und QT4.1
Das geht so nicht. beim connect verbindest du quasi nur die Funktoinen miteinander (ganz einfach ausgedrückt)
Du kannst aber eigene Slots definieren.
Dazu deklarierst du in der H-Datei im Abschnit private slot: deine Funktion. Z.B. MySlot(int myvalue)
In der entsprechende C-Datei schreibst du nun die Funktion. Beispiel:
Und kannst dan mit connect(slider, SIGNAL(valueChanged(int)),this, SLOT(MySlot(int))); verbinden.
Es gib im Forum auch bereits Beiträge davon und der QT-Assistant ist auch ziemlich hilfreich.
Du kannst aber eigene Slots definieren.
Dazu deklarierst du in der H-Datei im Abschnit private slot: deine Funktion. Z.B. MySlot(int myvalue)
In der entsprechende C-Datei schreibst du nun die Funktion. Beispiel:
Code: Alles auswählen
void myclas::MySlot(int myvalue)
{
// mach wass die willst
// z.B. Wert neu setzen
}
Zuletzt geändert von Adi am 25. April 2006 08:02, insgesamt 2-mal geändert.
Win 2k, Win XP
QT Win Opensource 4.1.1
MinGW 3.4.2
QT Win Opensource 4.1.1
MinGW 3.4.2
Re: Signals und Slots für Dummies :-/
Da gibt es nicht viel zu erklären. In der Doku steht ganz klar:coffeejunky24 hat geschrieben:Ich würde mich wirklich freuen wenn sich jemand dazu erbarmen könnte mir das Prinzip nochmal für Dumme zu erklären!!
Vielleicht sollte man das doch mal in die FAQ aufnehmen, obwohl es nicht gerade sinnvoll erscheint. Schließlich steht die Lösung in der Doku.The signature of a signal must match the signature of the receiving slot.n fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.)
Angesprochen? Besprochen meinst Du wohlAdi hat geschrieben:Ein FAQ währe nicht schlecht, da dieses Thema in der letzte Zeit mehrfach angesprochen wurde.
-
Spielgrips
- Beiträge: 51
- Registriert: 8. März 2006 23:09
- Kontaktdaten:
Sagen wirs mal sooo:
connect(button, was_ich_mach_event(), lcd, was_soll_gemacht_werden_slot());
und die Events mit SIGNAL() casten und eben mit SLOT() die Slots...
Das anteuern mit Button auf LCD hatte ich mal gezeigt bei einem Thread:
http://www.qtforum.de/forum/viewtopic.p ... highlight=
(Weiter runter scrollen...) Nur das eben 1 angezeigt wird beim Button betätigen..
connect(button, was_ich_mach_event(), lcd, was_soll_gemacht_werden_slot());
und die Events mit SIGNAL() casten und eben mit SLOT() die Slots...
http://www.qtforum.de/forum/viewtopic.p ... highlight=
(Weiter runter scrollen...) Nur das eben 1 angezeigt wird beim Button betätigen..
-
coffeejunky24
- Beiträge: 16
- Registriert: 24. April 2006 20:49
- Wohnort: RhPf
- Kontaktdaten:
Vielen Dank für alle hilfreichen Antworten.
Natürlich hab ich versucht in der Doku durchzusteigen und auch hier gesucht. Ich dachte auch mehrmals ich habe den Lösungsansatz gefunden und dann versucht den umzusetzen... compiler fehler habe ich selten aber ich darf andauernd Problemberichte and Microsoft senden
Ich befürchte das Problem ist, dass ich auch neu in der C++ Programmierung bin und da wohl irgendwelche Konventionen nicht einhalte.
Die Lösung von Spielgrips ließ sich einwandfrei anpassen und kompilieren. Kaum habe ich versucht das in eine header udn eine cpp Datei auszulagern -> Problembericht an Microsoft senden :-/
Ich versuche morgen nochmal weiter dran herum und sollte ich es wieder nicht hinbekommen belästige ich euch evtl mal mit meinem Quellcode!
Bis dahin nochmal Danke an Alle!
Natürlich hab ich versucht in der Doku durchzusteigen und auch hier gesucht. Ich dachte auch mehrmals ich habe den Lösungsansatz gefunden und dann versucht den umzusetzen... compiler fehler habe ich selten aber ich darf andauernd Problemberichte and Microsoft senden
Ich befürchte das Problem ist, dass ich auch neu in der C++ Programmierung bin und da wohl irgendwelche Konventionen nicht einhalte.
Die Lösung von Spielgrips ließ sich einwandfrei anpassen und kompilieren. Kaum habe ich versucht das in eine header udn eine cpp Datei auszulagern -> Problembericht an Microsoft senden :-/
Ich versuche morgen nochmal weiter dran herum und sollte ich es wieder nicht hinbekommen belästige ich euch evtl mal mit meinem Quellcode!
Bis dahin nochmal Danke an Alle!
-
coffeejunky24
- Beiträge: 16
- Registriert: 24. April 2006 20:49
- Wohnort: RhPf
- Kontaktdaten:
Hi!
Ich nochmal
Habe mich entschlossen erstmal so weiterzuarbeiten.. aber würde gerne noch eine weitere Frage hier anhängen...
In meinem C Programm lässt sich folgender Code problemlos compilieren:
*schnip*
hLib = LoadLibrary("xyz.dll");
*schnap*
in meinem QWidget jedoch bekomme ich folgende Fehlermeldung:
cannot convert "const char*" to "const WCHAR*"
Könnte mir evtl jemand kurz erklären wo der Fehler liegt oder hat evtl nen Lösungsvorschlag?
Schonmal vielen Dank im Voraus!!
PS: Sorry für mein Unverständnis der ganzen Materie
Ich nochmal
Habe mich entschlossen erstmal so weiterzuarbeiten.. aber würde gerne noch eine weitere Frage hier anhängen...
In meinem C Programm lässt sich folgender Code problemlos compilieren:
*schnip*
hLib = LoadLibrary("xyz.dll");
*schnap*
in meinem QWidget jedoch bekomme ich folgende Fehlermeldung:
cannot convert "const char*" to "const WCHAR*"
Könnte mir evtl jemand kurz erklären wo der Fehler liegt oder hat evtl nen Lösungsvorschlag?
Schonmal vielen Dank im Voraus!!
PS: Sorry für mein Unverständnis der ganzen Materie
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Was soll das denn sein?svenstar hat geschrieben: deklariere das hLib um, dann müsste es gehn...
Mfg Svenstar
Das Problem hat rein gar nichts mit Qt zu tun (und ich verstehe nicht wozu man LoadLibrary in einem Qt-Programm braucht). Es liegt einfach daran, dass Qt mit Unicode-Unterstützung compiliert ist und man deshalb (zwangsläufig) auch die Unicode-WinAPI-Funktionen verwendet. Also übergib LoadLibrary anstatt einem char* einen Unicode-String und fertig.
LoadLibrary("xyz.dll"L) oder LoadLibrary((WCHAR*)QString("xyz.dll").utf16()) oder man benutzt die Ansi-Version -> LoadLibraryA("xyz.dll")
Ausserdem: http://doc.trolltech.com/4.1/qlibrary.html
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung