Est-ce que Python va bien avec QML (Qt-Quick)?

je suis un débutant en Qt Quick. Je ne suis pas au courant de Qt qui est une base pour QML. Et aussi je ne suis pas familier avec C++ qui est encore une fois le principal langage supporté par Qt et QML. Je suis conscient que JS peut faire beaucoup de logique dans la couche QML elle-même. Mais si nous avons besoin d'interactions avec OS, alors nous devons utiliser un langage de base. Comme je suis à l'aise avec Python, je planifie pour " QML-JS-Python" la combinaison.

Alors, mes questions:

  1. pour les applications avancées et Développement du jeu est-ce que Python & Qt-Quick fait bien main dans la main?
  2. est-ce que ma combinaison Trio (QML-JS-Python) est assez bonne pour ça?
  3. et dois-je apprendre Qt pour le développement D'applications pour le couplage avec Python de QML?
  4. si oui pour Qust 3 alors devrais-je apprendre le Qt complet ou seulement les quelques lignes de code qui tiennent lieu de porte de communication entre Python et QML?

désolé si je suis stupide de poser ces Questions. Mais je voudrais profiter de des suggestions et des opinions .

Edit: Toutes les Limitations de cette Combinaison QML-JS-Python

Merci d'Avance

26
demandé sur inblueswithu 2013-03-14 13:55:52

2 réponses

Sur un plan conceptuel, ils vont très bien ensemble. J'ai écrit un programme python/qml/js/opengl qui combine tout assez bien. C'était avec Qt4.7 et PySide.

si vous utilisez QML, vous pouvez minimiser la quantité de Qt à laquelle vous devrez être exposé (bien que, comme toujours, plus de connaissances vous rendent plus puissant). Essentiellement, une fois que vous avez une vue qdeclarativeview, votre travail Qt est fait en dehors de la manipulation du signal/slot, qui est une joie sous PySide. Je dirais que vous pouvez être productif rapidement en utilisant Python et QML sans trop vous soucier du côté Qt des choses, en le ramassant si nécessaire.

d'expérience, je suggère de clarifier la démarcation entre Python et QML dans votre propre esprit. J'ai restreint le QML à la logique gui, ce qui est fait très bien; en effet, le QML gère la façon dont l'interface répond aux entrées, puis renvoie les signaux au programme principal. Il fonctionne un peu comme la création d'une très simple, épuré interface entre l'interface graphique et le reste du programme, ne signalerait que la logique de haut niveau (plutôt que, par exemple, de renvoyer un clic, il enverrait un signal disant par exemple "allumer le traitement", l'interface graphique traiterait de la façon de rendre ce changement). Dans mon cas, ça vient d'être branché directement dans mon cadre MVC, mais vous pouvez le faire comme vous voulez.

il y a une grosse mise en garde cependant dans tout cela. Le développement de PySide est plutôt au point mort et ne supporte pas Qt5 et tous son amélioration QML bonté. Il y a eu diverses discussions sur la façon dont il devrait être soutenu, mais pas beaucoup de code réel engagé.

je crois que PyQt supporte Qt5, mais double licence GPL ou commerciale (PySide est LGPL donc peut être utilisé avec code source fermé). Je n'ai aucune expérience de PyQt, mis à part le fait que PySide et PySide se remplacent l'un l'autre.

Edit: il semble que je parle de l'utiliser comme un MVVM.

éditer (toute question de limitations): L'ensemble de Qt est exposé par PySide et PyQt. Cela signifie que vous pouvez écrire des extensions en Python comme vous le feriez en C. j'ai écrit un widget qui a capturé les événements de défilement de la souris pour que je puisse voler le défilement d'un Flickable. C'était un élément QML créé en Python, bien que j'ai dû le charger à partir de Python; je n'ai pas pu tout à fait trouver comment créer une extension que je pouvais Charger à partir du document QML. Il est possible bien sûr pour écrire une extension C qui est autonome par rapport à votre code principal, vous avez toujours cette option.

28
répondu Henry Gomersall 2013-07-18 08:59:38

à partir d'avril 2016 PySide est officiellement soutenu par la société Qt.

la page d'accueil officielle est ici. La licence LGPL est une option, ce qui semble être la principale raison pour laquelle le projet a été créé.

5
répondu kashiraja 2016-05-07 05:22:19