2010-05-11 12 views
8

En pocas palabras: Para aquellos familiarizados con las vinculaciones de lenguaje en Qt y Gtk +. P.ej. python y ruby. ¿Hay alguna diferencia de calidad o capacidad?Gtk + vs Qt idiomas enlaces

Más información: conozco muy bien C++ y Qt. Experiencia mínima con Gtk +. Sé que C++ no es ideal para enlaces de lenguaje debido a la falta de un ABI bien definido (interfaz binaria de aplicación). También leí que Gtk + se diseñó para vincularse a otros idiomas. Entonces me pregunto cómo esto se manufa en la práctica. ¿Las encuadernaciones Gtk + se mantienen mejor o funcionan mejor de alguna manera que sus equivalentes Qt?

Actualmente estoy bastante interesado en el lenguaje Go, y han comenzado a desarrollar enlaces Gtk +. Sin embargo, las vinculaciones de C++ están muy lejos. Me hace preguntarme si vale la pena aprender Gtk +.

+0

¿Qué pasa con Vala [http://live.gnome.org/Vala]? es un excelente lenguaje nuevo (mucho mejor que C++). Es como C# pero produce código nativo y es especialmente para desarrollo GTK +. – lepe

+0

Lo he pensado, pero mi principal interés estaba en Go. Tener una forma de codificar GUIs fue una segunda preocupación. Vala parece muy C#/Java. Hubiera preferido un enfoque más fresco similar a Go construido sobre GObject. –

Respuesta

8

He usado GTK y Qt en C++ y también PyGTK y PyQt en Python bastante extensamente.

Qt supera a GTK sin dudas: es una API mucho más flexible, moderna y limpia. GTK también carece de algunas características que son importantes para mí. Desde el punto de vista del marco, recomendaría Qt.

En cuanto a enlaces de idioma (solo puedo hablar de Python, ya que nunca he usado los equivalentes de Ruby), creo que PyGTK (usando Glade y un contenedor como Padraig Bradys libglade) hacen que la programación de GUI sea increíblemente fácil y divertida. Sin embargo, si puede GPL su software (o pagar la tarifa de licencia), entonces PyQt también es una buena opción, y aunque no es tan amigable como PyGTK + Glade (en eso con GTK puede definir su UI en Glade como un XML separado archivo, para que pueda modificar la interfaz de usuario sin tocar el código, en Qt si desea utilizar QtDesigner, tiene que generar código usando uic, si no recuerdo mal) la API en sí es realmente agradable de usar y refleja el diseño limpio de Qt frameworks muy cercano.

Sobre todo, probablemente recomendaría usar PyQt sobre PyGTK, pero puedo ser parcial ya que prefiero Qt a GTK hoy en día, aunque puede probar ambos y elegir cuál prefiera, ambos son casi triviales. trabajando.

Si está buscando un excelente libro sobre PyQt, recomiendo Rapid GUI Programming qith Python and Qt.

En resumen: IMHO Qt supera a GTK tanto en calidad como en capacidad. PyGTK y PyQt son de excelente calidad y capacidad refleja el marco subyacente, aunque PyGTK puede cargar archivos Glade xml.

+0

Gracias por la entrada :-) En realidad, Qt te ha permitido guardar tus archivos de diseñador Qt como XML y cargarlos directamente desde hace algún tiempo. Estoy leyendo cosas sobre Gtk + Model-View-Controller. GtkTreeView, etc. Hasta ahora, creo que el diseño se ve mejor que la solución de Qt. Pero en realidad no lo he usado así que podría estar equivocado. ¿Algún comentario sobre eso? ¿Hay áreas particulares en Qt con las que te resulte más fácil trabajar que Gtk? P.ej. diseño, sistema de ranura de señal, creación de nuevos widgets o simplemente el hecho de que C++ es más fácil de trabajar que C? –

+0

Es interesante, cuando lo estaba buscando hace un tiempo, no encontré nada .. Me gusta el mecanismo de ranura de señal Qts, es muy flexible y fácil de usar; Me gusta mucho el sistema de visión de gráficos para Qt mejor que los equivalentes de GTK y encontré que el conjunto de widgets de Qt es más completo y rico en características (por ejemplo, sin extensiones torpes, GTK no tiene soporte para ventanas acoplables). Hago la mayor parte de mi trabajo en C++ ahora y lo encuentro conveniente y fácil (no tan fácil como Python, pero lo suficientemente cerca como para escribir código Qt en C++, especialmente para dibujar código, sin preocuparme por la complejidad del código) – Dan

+0

Bien interesante No pensé en todas las demás API que tiene Qt, como Graphicsview. Que de hecho es bastante agradable. Miré GtkComboBox y GtkTreeView y se veía mejor diseñado que QComboBox y QTreeView. Es más fácil poner widgets en columnas y definir el modelo. ¿Qué quieres decir con extensiones torpes? ¿Las otras API basadas en GObject como Clutter, etc.? –

0

hay enlaces C++ gtk +. Google para gtkmm.

+0

Lo sé. No estoy preguntando si existen. Pero sobre su calidad –

1

He trabajado tanto con PyQt como con PyGTK y yo diría que ambos se mantienen y sincronizan regularmente con sus frameworks principales. Sin embargo, y esto es completamente subjetivo, me pareció más gratificante trabajar con PyGTK que con PyQt, incluso si no había escrito ningún código con GTK. Si conoces bien a Qt, ve con Qt sin embargo.

2

Creo que las vinculaciones de GTK son más antiguas que las de Qt (y por eso un poco más maduras) pero ambas son utilizables y su conocimiento previo de Qt debería ser el factor principal en su elección.

Desarrollé pequeñas GUI utilizando tanto Qt como GTK con sus enlaces de python y encontré los dos equivalentes. Sin embargo, algunos lamentan las vinculaciones de PyQt con el contenedor Qt (QVector, ...) que no están traducidas a la estructura de datos de python normal y, por lo tanto, agregan un poco de complejidad al código. No recuerdo los mismos problemas usando PyGTK.

+0

QVariant, y otros ruidos no son necesarios, si usas PyQt con python3 – pihentagy

1

He estado probando algunas combinaciones en Qt: RubyQt, JRuby + Jambi, PyQt. El primero termina rápidamente en varias fallas de segmentación. Mis habilidades de Qt pueden ser el problema, pero todas las fallas seg no son del todo legibles.El foro para RubyQt está casi muerto, así que no esperes encontrar mucha información allí.

Así que me mudé a JRuby + Jambi. Esto funcionó hasta bien, alcancé algunas funciones faltantes aquí y allá. Además, tuve que implementar una señal/conexión adecuada para JRuby. Entonces, más o menos un truco. No es convincente.

Finalmente me mudé a Python (que no me gusta mucho). Pero woooh, qué diferencia. Las vinculaciones están actualizadas, aún tengo que anunciar una falla de segmetatio, los mensajes de error son la mayoría de las veces muy explicativos. Por lo que a mí respecta, Python + Qt es un claro ganador.

Tenga en cuenta que estaba probando estas combinaciones para encontrar un enlace de idioma/qt adecuado para poder crear una producción lista con mis horas de conmutación (aproximadamente 2 horas por día). Entonces, mi tolerancia a problemas pequeños pero molestos como las fallas de segmentación es 0. También tengo que desarrollarme en Windows y Linux. Entonces la instalación de Windows es necesaria (y una vez más, Python es un claro ganador aquí).