2010-04-22 14 views
25

Quiero escribir una aplicación C++ con Qt, pero construir primero un prototipo usando Python y luego reemplazar gradualmente el código Python con C++.Creación de prototipos Qt/C++ en Python

¿Es este el enfoque correcto, y qué herramientas (enlaces, generadores vinculantes, IDE) debo usar?
Idealmente, todo debería estar disponible en los repositorios de Ubuntu para no tener que preocuparme por las versiones incompatibles o antiguas y tener todo configurado con un simple aptitude install.
¿Existe alguna documentación exhaustiva sobre este proceso o debo aprender cada componente y, en caso afirmativo, cuáles?

Ahora tengo varias opciones para hacer: Qt Creator, debido a la buena terminación automática y la integración de Qt.
Eclipse, ya que ofrece soporte para C++ y Python. Eric (no lo he usado aún) Vim

PySide ya que está trabajando con CMake y Boost.Python, lo que en teoría se hará la sustitución de código Python más fácil. PyQt, ya que es más utilizado (más soporte) y está disponible como un paquete Debian.

Editar: Como tendré que implementar el programa en varias computadoras, la solución C++ requeriría 1-5 archivos (el programa y algunos archivos de biblioteca si lo estoy vinculando estáticamente), usando Python I ' Tengo que construir PyQt/PySide/SIP/lo que sea en cada plataforma y explicar cómo instalar Python y todo lo demás.

Respuesta

35

Quiero escribir una aplicación en C++ con Qt, pero construir primero un prototipo usando Python y luego reemplazar gradualmente el código de Python con C++. ¿Es este el enfoque correcto?

Eso depende de sus objetivos. Habiendo hecho ambas cosas, te recomendaría que te quedes con Python siempre que sea posible y razonable. Aunque requiere un poco de disciplina, es muy posible escribir aplicaciones extremadamente grandes en Python. Pero, a medida que encuentre hotspots y cosas que pueden manejarse mejor en C++, ciertamente puede transferir partes relevantes a C++.

¿Existe alguna documentación exhaustiva sobre este proceso o debo aprender cada componente y, en caso afirmativo, cuáles?

Aquí es lo que recomiendo para las diferentes piezas:

EDITOR/IDE: utilizar cualquier editor/IDE que se sienta cómodo, pero yo recomiendo que soporta refactorización. Si te sientes cómodo con Eclipse, úsalo. Si quieres ir principalmente a la ruta C++ y no estás muy familiarizado con ningún editor, es posible que estés mejor con QtCreator. Eric es un IDE de Python extremadamente bueno con soporte para refactorización, a menos que vaya a hacer mucho C++, échele un vistazo. Aún mejor, su código fuente es un ejemplo de buen uso y prácticas de PyQt.

PROCESO:

El breve resumen:

  1. escribir una aplicación en Python usando PyQt
  2. Cuando identificado como puntos de acceso, convertir las clases de Python desconectados a C++
  3. Crear enlaces para los clases que usan SIP
  4. Importe el libr recién definido aries en Python en lugar de sus homólogos Python
  5. Disfrute de la mejora en la velocidad

Detalles generales:

escribir la aplicación en Python usando PyQt. Tenga cuidado de mantener un buen separation of concerns para que cuando necesite portar piezas a C++ estén separadas de sus dependencias. Cuando finalmente necesite portar algo a C++, escríbalo en C++/Qt y luego cree enlaces para él usando SIP. SIP tiene un good reference manual en el proceso, y tiene todo PyQt como ejemplo.

DESPLIEGUE:

C++ - Para muchas aplicaciones de las dependencias son lo suficientemente simple que no es demasiado difícil crear un instalador usando una herramienta como NullSoft's Installer o InnoSetup.

Python/PyQt - Las aplicaciones PyQt son un poco más difíciles de instalar debido a la dependencia de Python y su dependencia de la presencia de las bibliotecas Qt. Una persona documentó sus esfuerzos en this post at ARSTechnica. py2exe funciona bastante bien en Windows y debería funcionar bien. IME, freeze.py, que viene con la fuente Python, a veces tiene problemas para determinar qué librerías compartidas son realmente necesarias y algunas veces terminará creando un binario cuyas dependencias no están presentes. Py2app can be made to work on Mac OS X.

Pero peor, sin embargo, es la licencia de PyQt/Qt. Si está desarrollando una aplicación comercial, debe tener una licencia comercial PyQt (y Qt) y asegúrese de evitar que los usuarios modifiquen fácilmente la fuente o escriban código contra PyQt/Qt API because of licensing restrictions. Por eso, el autor de PyQt creó una herramienta llamada VendorId (aunque tiene una licencia de Python). Dentro de VendorId hay una herramienta llamada SIB que se puede usar para crear un ejecutable que depende solo del intérprete de Python. Pero, si vas a llegar tan lejos, es posible que desees instalar un Python personalizado junto con tu aplicación.

RENUNCIA: No he utilizado PySide en absoluto, así que no estoy seguro de cómo se compara con PyQt. Además, tenga en cuenta la siguiente advertencia en su sitio web:

PySide es un trabajo en progreso y todavía no es adecuado para el desarrollo de aplicaciones que requieren estabilidad en el nivel de producción.

Pero, en una buena nota, pretenden, al menos para la versión inicial, "mantener compatibilidad API con PyQt". Entonces, aparte de los enlaces de C++, podrías cambiar fácilmente entre los dos más tarde.

+0

¡Buena respuesta! Puede considerar una sección en py2exe/freeze.py en respuesta a la edición del OP, aunque no hicieron la pregunta explícitamente. – tgray

+0

@tgray - gracias por el aviso de las ediciones. He agregado una sección de Implementación. –

+2

quizás actualice la parte 'Pyside no es adecuada para nivel de producción' ya que ha sido por un tiempo. – vikki

3

Si solo está aprendiendo Qt y quiere aprovechar la velocidad de creación de prototipos que Python le ofrece, entonces le recomendaría que haga un proyecto de muestra usando PyQt. Como dijo, hay un paquete de Debian, por lo que solo tiene un simple apt-get para realizar su primera solicitud.

Yo personalmente uso gVim como mi editor de Python/Qt, pero realmente puede usar cualquier editor compatible con Python sin muchos problemas. Me gustó WingIDE y se han completado automáticamente para Qt, pero una vez que bebes del vim kool-aid es difícil cambiar.

diría que es PySide 95% + compatible con PyQt y la licencia LPGL es agradable, pero si usted está tratando de un prototipo de su primera aplicación Qt, entonces no creo que hay una verdadera razón para utilizar PySide . Aunque me gustan los documentos PySide, también puede usarlos y reemplazar todas las referencias de la biblioteca con PyQt.

Dependiendo de la complejidad de la aplicación que está construyendo, sería mejor comenzar de cero con una versión en C++ que tratar de hacer un manojo SIP refactorizar la magia negra. Una vez que tenga una sólida comprensión del marco Qt, podrá cambiar entre las uniones C++ y Python sin esfuerzo.

1

Dibujaría maquetas UI antes de comenzar a codificar prototipos. Aquí están algunas ventajas:

  • Más rápido de prototipos de codificación ya que no hay programación involucrada

  • llenar rápidamente widgets, tales como tablas y árboles, con los datos

  • Añadir descripciones y notas a su pantallas

  • Integre fácilmente maquetas en documentos de especificación sin tener que capturar pantallas

  • Validar la interfaz de usuario conceptos de diseño antes de implementar

Hay una gran cantidad de herramientas que pueden ayudarle a hacer eso, pero si usted va a usar Qt, MockupUI puede ser una buena opción, ya que hace que los componentes Qt con estilos nativos para Windows 7,8 o 10 que hacen que su maqueta parezca más realista.