2011-01-28 12 views
5

Me gustaría crear una GUI para una aplicación OCaml que estoy escribiendo. Mi primera idea fue usar GTK+. Me gustaría que mi aplicación se ejecute en Mac, Linux, Windows con un aspecto y una apariencia naturales. Sé que, mientras que GTK + usa X11 en Mac por defecto (que se ve horrible), hay gtk-osx-application que usa cuarzo y se ve natural y que acabo de instalar usando macports.Desarrollo cruzado de GUI en OCaml con aspecto natural

Tengo tres preguntas:

(1) ¿Es realmente posible utilizar gtk-osx-application +quartz+no_x11 con OCaml? (Mi instalación GODI que previamente (con gtk2 basado en x11) instaló lablgtk2 sin problemas, ahora (con gtk-osx-application +quartz+no_x11 y el gtk2 anterior basado en x11 eliminado) se queja de no encontrar /opt/local/lib/libgtk-x11-2.0.0.dylib, que está relacionado con x11. como sé, no hay forma de elegir cuarzo sobre x11 al instalar lablgtk2 a través de GODI.)

(2) Si desarrollo mi código en mi Mac utilizando la aplicación gtk-osx, ¿puedo usar el código como para compilación en otras plataformas que utilizan diferentes GTK o puede traer problemas?

(3) Si trae problemas, ¿sabe de algún otro entorno para desarrollar GUI en OCaml que pueda ser bueno con respecto a la apariencia y se pueda utilizar fácilmente? (Soy consciente de lo que ocurre, pero preferiría algo con más capacidades, por ejemplo, la capacidad de usar cuadernos, paneles con pestañas y poder usar Glade para un diseño rápido de GUI.)

¡Gracias por cualquier ayuda!

Saludos, Surikator

+0

No he tenido que meterme demasiado con la GUI de mis aplicaciones, pero utilizamos REAL BASIC para nuestra solución de plataforma x. Creo que se ve muy bien. – nlucaroni

+0

A menos que malinterprete, la versión más barata cuesta $ 100. ¿Es este de quien estás hablando? – Surikator

Respuesta

3

Suponiendo que usted puede conseguir lablgtk funcione, es probablemente la mejor opción en la actualidad.

Para que funcione: ¿ha intentado reconstruir lablgtk después de quitar X11 GTK e instalar Quartz GTK? Un LablGTK construido contra X11 GTK naturalmente no funcionará en un Quartz GTK, ya que se vinculará con la biblioteca incorrecta, pero una reconstrucción podría ser exitosa. También podría ser que LablGTK no detecte correctamente que las llamadas de integración X11 no funcionen y, por lo tanto, no se puedan compilar, pero espero que no sea demasiado difícil de corregir ya que LablGTK sí es compatible con Windows.

Si desarrolla código para GTK en Mac, debería funcionar en otras plataformas sin problemas. Querrás probarlo, por supuesto, pero debería funcionar. Tenga cuidado de usar las instalaciones de GTK para que las cosas como el orden de los botones de diálogo funcionen correctamente.

Creo que en un momento hubo un conjunto de enlaces OCaml a wxWidgets, pero no parecen ser ampliamente utilizados y wx es doloroso para trabajar en mi experiencia. También ha habido algo de trabajo en hacer enlaces Qt, lo que sería increíble, pero no creo que haya ningún proyecto con buenos avances en ese frente todavía.

Si la IU es una pieza pequeña de tu proyecto, podrías ver cómo desacoplarla del backend y escribir la IU en C++ con Qt, o escribir UI nativas de la plataforma, y ​​hacer que la IU llame a OCaml código en un tiempo de ejecución incrustado para realizar el trabajo real. Pero es probable que sea más trabajo y puede que no le brinde muchos beneficios, dependiendo de su aplicación.

Entonces: GTK es su mejor opción en el panorama actual.

+0

@MichaelE Gracias por la respuesta completa y muy útil. Me alegro de escuchar que funciona multiplataforma. Sí, consideré la opción de back-end, especialmente porque mi sistema también tendrá una UI de terminal/consola, por lo que parecería una opción viable. Pero la GUI también debe presentar algunas estructuras internas de datos ocaml a los usuarios y no me gustaría tener que replicarlas en C++ o en otra cosa. Entonces, por ahora, seguiré intentando arreglar mi instalación de lablgtk2. Ver mi próximo comentario. – Surikator

+0

@MichaelE Sí, el pedido fue: (1) eliminar x11 GTK, (2) instalar cuarzo GTK, (3) desinstalar lablgtk2 en GODI, (4) instalar lablgtk2 en GODI. Ahora he logrado instalar godi-lablgtk2 con --with-glade y compilado con éxito. Es una buena noticia, pero una de las grandes cosas que esperaba de GTK fue precisamente Glade. ¿Algunas ideas? – Surikator

+0

Además, sucede algo extraño. Si compilo un 'helloworld.ml' con' ocamlc -I + lablgtk2 -o helloworld lablgtk.cma gtkInit.cmo helloworld.ml' todo está bien y se ejecuta el ejecutable. Pero si compilo con 'ocamlbuild -libs lablgtk -cflags -I,/Users/surikator/godi/lib/ocaml/pkg-lib/lablgtk2 -lflags -I,/Users/surikator/godi/lib/ocaml/pkg-lib La compilación/lablgtk2 tmp/toolbar.native' está bien pero en tiempo de ejecución obtengo un error de segmentación con muchas cosas como 'GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed'. – Surikator

Cuestiones relacionadas