2011-05-30 6 views
1

Je pensais à ajouter pythonqt à mon application pour écrire des plugins. Mon application est en C++ et utilise déjà le framework Qt. L'option pythonqt semble parfaitement adaptée à l'ajout de composants graphiques, mais je m'inquiète de la façon dont le programme évoluera si j'expose une classe avec des millions d'instances. Il ne sera pas rare d'avoir quelque chose comme un million d'un certain type d'objet en mémoire et je voulais m'assurer que pythonqt serait capable d'exposer ces objets sans les rendre QObjects. Peut-être bien, je suppose, mais avant de commencer, je me demandais si exposer un si grand nombre de classes serait pratique en utilisant pythonqt et si quelqu'un avait une quelconque expérience de la mise à l'échelle autant. De ce lien (http://pythonqt.sourceforge.net/Developer.html), il semble que les décorateurs ne les chargent en fait que dans python/Qt à la demande. Je ne veux tout simplement pas une empreinte mémoire encore plus grande de Qt essayant de garder une trace de ces millions d'objets sans raison.l'évolutivité de pythonqt pour des millions d'objets

+0

Est-ce que cela devrait être "embarqué"? Voir: http://stackoverflow.com/tags/embedded/info – Clifford

Répondre

0

Je n'ai pas beaucoup fait avec mais il semble presque que vous devriez au moins regarder QtQuick/QML couche. Il est difficile de dire à partir de votre description ce qui se passe mais QML est un moyen d'écrire des interfaces graphiques Qt sans codage C++. Il s'appuie sur l'implémentation et le pont Qt/JavaScript déjà existants et qui fonctionnent bien. En ce qui concerne l'exposition d'instances de classes à un langage de script, cela dépend généralement de l'implémentation du pont. Bien qu'il y ait généralement du code en jeu, vous pourriez ne pas le faire par instance, ou il pourrait être instancié paresseusement à un point où vous aurez seulement beaucoup moins que les millions d'instances enveloppées que les originaux que vous détenez en mémoire.

+0

Cela m'a semblé une solution raisonnable après avoir découvert des prototypes dans Qt, afin de pouvoir faire le lien entre des objets qui n'étaient pas nécessairement des qobjets. – voodoogiant

2

PythonQt crée uniquement des wrappers Python pour les instances C++ exposées à Python. Ainsi, si vous n'exposez pas des millions d'instances C++ à Python en même temps, il s'agencera bien et ne créera des wrappers que pour les objets exposés. Ces wrappers sont supprimés lorsqu'ils sortent de la portée en Python, donc cela devrait également être mis à l'échelle. Le meilleur moyen d'encapsuler un objet C++ est d'enregistrer une classe dérivée QObject pour chaque classe C++, cela permet d'enregistrer plusieurs classes sans créer/évaluer les décorateurs jusqu'à ce qu'une classe de ce type devienne visible par Python. Jetez un coup d'œil sur les wrappers Qt, par ex. PythonQtWrapper_QImage, pour voir à quoi ressemble un tel décorateur et comment il est enregistré.

Questions connexes