In Qt kann es beim Verbinden von Signalen von C-Klassen mit QML-Slots manchmal zu Fehlern kommen, wenn es um nicht-primitive Typen geht. Beispielsweise kann der Versuch, einen QString von einem C-Signal an einen QML-Slot zu übergeben, zu folgendem Fehler führen: „Object::connect: No such slots QDeclarativeRectangle_QML_2::updateViewWithItem(QString)“.
Um dieses Problem zu beheben, verwenden Sie QML-Verbindungen anstelle der herkömmlichen QObject::connect-Methode. So implementieren Sie es:
Fügen Sie das Objekt zu QML hinzu: Machen Sie in Ihrem C-Code das myObj-Objekt mit setContextProperty für QML verfügbar.
<code class="cpp">qmlVectorForm->rootContext()->setContextProperty("YourObject", myOb);</code>
Definieren Sie das Signal:Deklarieren Sie in Ihrer C-Klasse das Signal wie folgt:
<code class="cpp">finishedGatheringDataForItem(QString signalString)</code>
Verbindungen hinzufügen in QML: Definieren Sie in Ihrer QML-Datei die Verbindungen wie folgt:
<code class="qml">Connections { target: YourObject onFinishedGatheringDataForItem: { qmlString = signalString } }</code>
Indem Sie diese Schritte befolgen, können Sie eine Verbindung zwischen dem C-Signal und dem QML-Steckplatz herstellen , sodass Sie benutzerdefinierte Datentypen nahtlos übergeben und verarbeiten können.
Das obige ist der detaillierte Inhalt vonWie übergebe ich nicht-primitive Typen zwischen C-Signalen und QML-Slots?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!