Maison >développement back-end >C++ >Comment transmettre des types non primitifs entre les signaux C et les emplacements QML ?

Comment transmettre des types non primitifs entre les signaux C et les emplacements QML ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 16:26:29401parcourir

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

Dépannage de la connexion signal-emplacement entre C et QML

Dans Qt, la connexion des signaux des classes C aux emplacements QML peut parfois rencontrer des erreurs lorsqu'il s'agit de types non primitifs. Par exemple, tenter de transmettre une QString d'un signal C à un slot QML peut entraîner l'erreur : "Object::connect: No such slot QDeclarativeRectangle_QML_2::updateViewWithItem(QString)".

Solution : Utilisation des connexions

Pour résoudre ce problème, utilisez les connexions QML au lieu de la méthode traditionnelle QObject::connect. Voici comment l'implémenter :

  1. Ajoutez l'objet à QML : Dans votre code C, exposez l'objet myObj à QML en utilisant setContextProperty.

    <code class="cpp">qmlVectorForm->rootContext()->setContextProperty("YourObject", myOb);</code>
  2. Définissez le signal : Dans votre classe C, déclarez le signal comme suit :

    <code class="cpp">finishedGatheringDataForItem(QString signalString)</code>
  3. Ajouter des connexions en QML :Dans votre fichier QML, définissez les connexions comme ceci :

    <code class="qml">Connections {
        target: YourObject
        onFinishedGatheringDataForItem: {
            qmlString = signalString
        }
    }</code>

En suivant ces étapes, vous pouvez établir une connexion entre le signal C et le slot QML , vous permettant de transmettre et de gérer des types de données personnalisés de manière transparente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn