2016-11-04 1 views
-1

Wir versuchen gerade, eine Anwendung von Qt4.8 auf Qt5.5 zu portieren, und wir haben Probleme mit Signalverbindungen zur Laufzeit.Kein solches Signal bei der Portierung von Qt4.8 auf Qt5.5

Wir verwenden die alte Syntax für Signale und Slots, die immer noch unterstützt wird, und wir erhalten Nachrichten wie "kein solches Signal" zur Laufzeit unter Qt5.5, während die Ausführung unter Qt4.8 gut funktioniert.

Zum Beispiel haben wir die folgende Verbindung:

connect(_vuePalette, SIGNAL(paletteModifiee(Pointeur<LUT>, Pointeur<Fonction>, TypeValeurVue, bool)), this, SLOT(paletteModifiee_SLOT(Pointeur<LUT>, Pointeur<Fonction>, TypeValeurVue, bool)));

Die Meldung zur Laufzeit generiert wird:

QObject :: connect: kein solches Signal VuePalette :: paletteModifiee (Pointeur, Pointeur, TypeValeurVue, bool) in vueimage.cpp: 83 (Sendername: 'VuePalette')

_vuePalette bezieht sich auf eine Klasse "VuePalette", die von QWidget abgeleitet ist und das Makro Q_OBJECT enthält. Dies bezieht sich auf eine Klasse namens "VueImage", die von mehreren von QObject abgeleiteten Klassen abgeleitet ist, und "VueImage" enthält auch das Makro Q_OBJECT .

Das Signal und der Steckplatz sind jeweils im Abschnitt "signals" der Klasse "VuePalette" und im Abschnitt "public slots" der Klasse "VueImage" definiert.

Hat jemand einen Hinweis auf die Angelegenheit?

Mit freundlichen Grüßen,

Anthony

+0

Bitte zeigen Sie den relevanten Code und die * tatsächliche * Fehlermeldung an. Besser noch, stellen Sie ein [mcve] (http://stackoverflow.com/help/mcve). Nebenbei, wenn Sie versuchen, die neue Syntax für die Verbindung zu verwenden, die das Problem verursacht, werden Sie wahrscheinlich einige nützliche Diagnosen vom Compiler bekommen. –

+0

Mit der neuen Syntax haben wir zur Laufzeit keine Fehlermeldung. Das Problem ist, dass wir viele Signale, Slots und Verbindungen haben, weil unsere Anwendung ziemlich groß ist. Wir würden lieber die alte Syntax verwenden als die neue. –

+0

Um etwas weiter zu diagnostizieren, könntest du - unmittelbar vor dem Aufruf von 'connect'' _vuePalette-> metaObject() 'aufrufen und das zurückgegebene' QMetaObject' verwenden, um die Signaturen des Signals abzufragen. Sehen Sie sich auch die Ausgabe des Präprozessors an, um sicherzustellen, dass die vom 'SIGNAL'-Makro erzeugte Zeichenkette wie erwartet ist - nur für den Fall, dass sie irgendwo neu definiert wird (obwohl das sehr unwahrscheinlich erscheint). –

Antwort

1

Vielen Dank für Ihre Antworten.

Ich glaube, ich habe gefunden, was das Problem ist: in der "connect" -Anweisung, "Pointeur" ist ein QSharedPointer, so "LUT" und "Fonction" Klassen müssen von QObject erben und das Q_OBJECT Makro enthalten.

Sorry, ich habe es vorher nicht gefunden, aber wenn es jemandem helfen kann, wäre es das wert :).

Verwandte Themen