Heim  >  Artikel  >  Backend-Entwicklung  >  Wie übergebe ich nicht-primitive Typen zwischen C-Signalen und QML-Slots?

Wie übergebe ich nicht-primitive Typen zwischen C-Signalen und QML-Slots?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 16:26:29328Durchsuche

How to Pass Non-Primitive Types Between C   Signals and QML Slots?

Fehlerbehebung bei der Signal-Slot-Verbindung zwischen C und QML

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)“.

Lösung: Verwenden von Verbindungen

Um dieses Problem zu beheben, verwenden Sie QML-Verbindungen anstelle der herkömmlichen QObject::connect-Methode. So implementieren Sie es:

  1. 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>
  2. Definieren Sie das Signal:Deklarieren Sie in Ihrer C-Klasse das Signal wie folgt:

    <code class="cpp">finishedGatheringDataForItem(QString signalString)</code>
  3. 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn