Seite 1 von 1
Signal and Slot mit QMap, QStringList etc.
Verfasst: 7. März 2006 12:49
von sascha
Hallo!
Ich habe hier gerade ein Problem und würde ich freuen, wenn Ihr meine Vermutung nicht bestätigen würdet
Also ich habe hier ein Signal
und in einer anderen Klassen den Slot implementiert:
Nun kommen die Signale aber beim Slot nicht an (Signal wird definitiv gesendet, habe ich debugged)

Wenn ich nun in der Signatur aus QStringList eine QString mache, dann funktioniert das....
Kann es sein, dass man Objekte wie QStringList oder QMap<QString, QString> nicht als Parameter in Signals und Slots verwenden kann? Oder muss man dann auf etwas achten, was ich übersehen habe?
Verfasst: 7. März 2006 13:07
von macman
Doch, das geht. Wirst wohl was übersehen haben.
Verfasst: 7. März 2006 13:34
von sascha
Ich bekomme es nciht hin....
Hier nochmal etwas mehr Code eventuell sieht ja einer den Fehler....
Definiert ist folgendes:
Code: Alles auswählen
private slots:
void gpsMessageRecived(const QStringList &);
In dieser Methode wird das Signal versendet und es wird definitiv gesendet!
Code: Alles auswählen
void EventController::newGPSMessage(QString message)
{
QStringList list = message.split(";");
emit gpsMessageRecived(list);
}
Connected habe ich das Signal auch:
Code: Alles auswählen
QObject::connect(EventController::getInstance(), SIGNAL(gpsMessageRecived(const QStringList &)), this, SLOT(gpsMessageRecived(const QStringList &)));
und dann wird es im Slot abgefangen:
Code: Alles auswählen
void GPSMonitorController::gpsMessageRecived(const QStringList &message)
{
ui.longitudeEdit->setText(message[0]);
}
Also wenn jemand etwas sieht...
Verfasst: 7. März 2006 13:47
von macman
Ich vermute den Fehler in der connect-Zeile, was sagt denn der Debugger dazu?
PS: Lobenswert das Du englischsprachige Methodennamen nutzt, aber dann schreib es auch bitte richtig

gpsMessageReceived
Verfasst: 7. März 2006 13:49
von hulk
hi,
also ich habe ein ähnliches Problem und es könnte die gleiche Ursache haben. Wäre schön, wenn wir das gemeinsam lösen könnten.
Also ich habe ein Menü mit einem Eintrag und ein dazugehöriges connect zu einer Funktion pling():
[code]connect(editAPAction, SIGNAL(triggered()), area, SLOT(pling()));[/code]
Das klappt auch alles ganz super. Nun möchte ich an die Funktion pling(int zahl) eine integer übergeben. Daher dachte ich, ein Aufruf folgendermaßen würde klappen:
[code]connect(editAPAction, SIGNAL(triggered()), area, SLOT(pling(5)));[/code]
Leider funktioniert das nicht. Die Funktion pling(int zahl) wird nicht aufgerufen. Woran liegt das? Kann man vielleicht in einem connect keine Zahl hart reinschreiben? Je nachdem ob und wie die Beschränkungen diesbezüglich sind, könnte dies aus Saschas Problem sein, je nachdem unter welchen Bedingungen er sein Signal abschickt.
@Sascha, vielleicht hast du einmal gpsMessageRecived und ein mal gpsMessageReceived (man achte auf das "e") geschrieben.
Verfasst: 7. März 2006 13:53
von sascha
macman hat geschrieben:Ich vermute den Fehler in der connect-Zeile, was sagt denn der Debugger dazu?
Der Debgger (Visual Studio) sagt, dass er connected wird... Das kann man auch daran erkennen, das ich, wenn man in dem ganzen Code aus dem
ein
macht, alles funktioniert!
Verfasst: 7. März 2006 14:11
von macman
sascha hat geschrieben:Der Debgger (Visual Studio) sagt, dass er connected wird...
Also sagt er gar nichts. Wenn eine Ausgabe zu sehen wäre, dann kann es nur ein Fehler sein.
Meine Signal-Deklaration der einen Klasse:
und der Slot der anderen Klasse:
Funktioniert einwandfrei.
Verfasst: 7. März 2006 14:18
von macman
hulk hat geschrieben:Woran liegt das? Kann man vielleicht in einem connect keine Zahl hart reinschreiben?
Du hast ein ganz anderes Problem, welches hier bereits oft besprochen wurde.
Verfasst: 7. März 2006 14:24
von sascha
Also macman,
ich habe das jetzt nochmal ohne const deklariert und immer noch nichts

Keine Ahnung, warum das bei Dir geht und nciht bei mir!
Verfasst: 7. März 2006 15:15
von BartSimpson
Mal eine andre blöde Frage, benutzt du auch die neuste Qt Version?
Verfasst: 7. März 2006 15:23
von sascha
Ich benutze QT 4.1
Verfasst: 7. März 2006 15:29
von BartSimpson
hast du es mal mit Qt 4.1.1 versucht?
Verfasst: 7. März 2006 15:30
von sascha
Nein! Haben sich denn da so grundlegene Dinge geändert?
Verfasst: 7. März 2006 15:42
von BartSimpson
Sie offizellen Änderungen:
http://www.trolltech.com/developer/chan ... 4.1.1.html
aber es tauchen leider nicht immer alle auf:(
Denn z.b Qt 4.1 lies sich nicht ohne Qt3 Support übersetzen in der 4.1.1'er geht das. Aber das wird nirgends erwähnt.
Verfasst: 8. März 2006 07:33
von macman
sascha hat geschrieben:Keine Ahnung, warum das bei Dir geht und nciht bei mir!
Schreib ein kleines Beispielprogramm und lad es hier hoch. Vielleicht habe ich es dann auch. Eine andere Frage, statisch oder dynamisch gelinkt? Es gibt z.B. definitiv ein Signal/Slot-Problem wenn ein statisch compiliertes Programm ein statisch compiliertes ActiveX einbindet. Generell empfiehlt Trolltech dynamisches Linken.