7
votes

Comment émettre des signaux de JavaScript à QML

Je veux émettre un signal de fichier JavaScript et le recevoir dans le fichier QML (pour trouver lorsque l'opération de consommation de temps sera terminée).

Comment puis-je le faire?


0 commentaires

3 Réponses :


5
votes

merci, @rajavarma.

J'ai trouvé une solution pour moi-même.

dans qml-fichier : créer un élément d'élément (mon loginitem) qui contient la fonction qui joue le Rôle de la fente. Par exemple (j'ai besoin de savoir quand gérer l'événement de connexion): xxx

dans js-file : créer un récepteur pour loginitem et l'utiliser. xxx


2 commentaires

non liée à la question mais c'est "connecté" non "enregistré";)


Je suis désolé pour mon anglais. Je promets de suivre le cours de langue ce mois-ci.



10
votes

Ni les solutions de Nore Raja de Alex répondent vraiment à la question. Alex consiste à appeler directement à partir du code JavaScript la méthode Slot QML, et RAJA consiste à définir la valeur d'une propriété d'un objet QML à partir du code JavaScript. Les deux approches annulent l'avantage principal du mécanisme de signal / machine à sous qui est que l'objet de signalisation n'a pas besoin de connaître la fente.

Une approche plus proche de l'esprit du mécanisme de signal / machine à sous est décrit dans cet Blog post (pas le mien). Il consiste, dans le fichier JavaScript, de créer un objet QML (via la fonction qt.createqmlObject () fonction) dont la seule fonction est de contenir les signaux d'objets de JavaScript. Les signaux sont émis à partir de JavaScript en appelant le signal d'objets QML interne (par exemple, internameqmlobject.signalName () ) et le signal d'objet JavaScript peut être connecté dans les emplacements QML à QML avec le Connecter habituel Mécanisme via JavaScriptObject.internalqmlobject.signalname.Connect (récepteur.slotname) .

Un exemple adapté de la poche blog est ci-dessous:

JavaScript_Object. JS: xxx

test.qml: xxx

sur l'exécution Il donne ce qui suit: xxx < / pré>


1 commentaires

Je suis d'accord. Bonne solution.



2
votes

Eh bien, il est très hacky d'appeler des signaux d'un vrai fichier JS. Mais il y a une meilleure option, Imho, l'a utilisé à la place. Créez votre propre classe.

myClass.qml xxx

De cette façon, vous pouvez facilement obtenir l'encapsulation nécessaire. Et vous pouvez même se connecter bien à l'objet.

Ensuite, vous pouvez faire ce que vous voulez avec elle: Créez un singleton à partir de celui-ci, créez un objet global, instancez-le.


0 commentaires