2016-03-29 12 views

Antwort

1

Sie sollten QObject::findChild() verwenden, um das Objekt zu finden, und rufen Sie einfach das Signal auf, wie Sie eine nominale Methode verwenden würden.

Aber es gibt einen Haken, wie QQuickRectangle selbst eine private Klasse ist, so dass es nicht direkt für die Verwendung in der C++ - API verfügbar ist. Es hat auch kein clicked() Signal, es sei denn, Sie haben selbst eines implementiert. Und wenn Sie es getan haben, wird es nicht Teil der C++ - Schnittstelle sein.

Auch gibt es kein onClicked() Signal, das Signal ist clicked() und onClicked: ist der Handler Hook.

Sie können jedoch immer noch emittieren, um das Qt Meta-System arbeiten, verwenden Sie nur:

QObject * object = engine.rootObjects().at(0)->findChild<QObject *>("yourObjectName"); 
if (object) QMetaObject::invokeMethod(object, "clicked"); 

Es funktioniert sogar, wenn das Signal auf der QML Seite implementiert ist, wird es funktioniert auch auf den Beton ohne Gießen C++ Typ.

Wenn sich Ihr Objekt nicht direkt in der Stammobjektstruktur befindet, können Sie es nicht finden und haben keine andere Wahl, als eine Referenz von der QML-Seite an einen C++ - Slot oder eine aufrufbare Funktion zu übergeben.

+0

Ich habe versucht, den Slot von QML onPropertyNameChanged() von invokeMethod aufrufen, aber es ist nicht die Behandlung, ich denke, Signal kann nur aufgerufen werden. – Ashif

+0

@Ashif - es gibt kein solches Objekt 'onSignalName' - dies ist nur eine Hilfe, um deklarative Verbindungen herzustellen, es kann nicht aufgerufen werden. – dtech