Ich möchte ein Signal, das von einem C++ - QObject erzeugt wird, mit einer Funktion in einem QML-Element verbinden. Das Signal ist das "aktivierte" Signal von einem QSystemTrayIcon und sein Argument ist ActivationReason (ein Enum-Wert).Wie verbinde ich ein Signal von C++ mit der QML-Funktion mit Parameter
Leider kann ich kein Signal mit dieser Signatur an einen Slot anschließen, der nur QVariant zu empfangen scheint.
In der QML-Datei
function trayIconClicked(reason) { ... }
In dem C++ Code
QObject::connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), rootObject, SLOT(trayIconClicked(QVariant)));
Und das ist, was ich
QObject::connect: Incompatible sender/receiver arguments
QSystemTrayIcon::activated(QSystemTrayIcon::ActivationReason) --> ApplicationWindow_QMLTYPE_11_QML_60::trayIconClicked(QVariant)
bekommen Wenn ich das Argument auf der Schlitzseite komplett über Bord werfen, Das Ereignis ruft die Funktion auf. Aber dann habe ich keine Ahnung was ActivationReason ausgelöst hat.
Eine vollständige Version des obigen Codes ist hier, außer, dass ich im Grunde Parameter nicht übergeben kann jetzt https://github.com/sturmf/qt_samples/tree/master/trayicon
vielleicht diese Seite Hilfe Sie: http://stackoverflow.com/questions/8834147/c-signal-to-qml-slot-in-qt – aghilpro
leider nicht, ich lese diese vor Antwort. Er hat Glück, dass beide Seiten, Signal und Slot zu QVariant geändert werden können. Ich habe den festen Parameter von der QSystemTrayIcon. Ich kenne auch einen Zwischenschlitz, der für die Übersetzung verwendet werden könnte. Aber mein Code lebt in der Hauptfunktion des C++ - Codes, wo ich kein QObject habe, das als Zwischenprodukt funktionieren könnte. – Fabian
@Fabian - Umwandlung in 'QVariant' wird für QML-C++ - Interop benötigt, Sie können den benutzerdefinierten Typ als Metatyp registrieren, damit er von einer Variante umschlossen werden kann, damit er an die QML-Seite übergeben werden kann. – dtech