2010-01-21 16 views
5

Así que he estado aprendiendo C# por un año (tengo 20 años) y me estoy volviendo bastante confiado. También me he entrometido con C++ de vez en cuando. Por ejemplo, recientemente he estado siguiendo el Nehe OpenGL tutorials para C++ y me parece una forma divertida de aprender.Iniciando wxWidgets C++ necesita un ligero empujón

Quiero comenzar a buscar la creación de software GUI multiplataforma después de tropezar con esta biblioteca llamada FLTK (algo fluido). Después de que finalmente y dolorosamente lo pusiera a funcionar me pareció refrescante saber que hay soluciones para la creación de GUI en C++, sin embargo, creo que FLTK parecía bastante viejo.

Así que busqué en Google algunos frameworks de GUI más nuevos y decidí comenzar a jugar con wxWidgets (se decidió en contra de Qt debido a la licencia). Lo descargué, lo compilé y miré para ver si había algún complemento IDE para el desarrollo de RAD, como se puede imaginar al pasar de un componente a un formulario en C#. Esperaba algo similar.

Me enteré de que code::blocks tiene algo así, así que lo intenté. Estuvo bien, pero lo que me desactivó fue la horrible finalización del código; solo mostraría miembros y métodos en el objeto actual y nada para los archivos de encabezado #included. Entiendo que la finalización del código/IntelliSense no es fácil para C++, pero Visual Studio 2008 lo maneja bastante bien. Encontré algunas otras herramientas de RAD como wxFormBuilder pero cuesta dinero, no es algo que quiero hacer simplemente por aprender.

¿Mi pregunta es TLDR si alguien ha tenido experiencia con wxWidgets? ¿Acabas de desarrollar en cualquier IDE con el que te sientas cómodo y solo codificas la GUI? ¿Significa que no hay ayuda visual? Tal vez podría darme un empujón en qué dirección debería ir :)

Gracias, esta es también mi primera publicación en este sitio, aunque he leído muchos hilos antes que me han ayudado a resolver copiosos problemas. ¡Aclamaciones!

+1

Qt es LPGL - ¿qué hay de esa licencia que no te gusta? IMO, Qt es el marco más completo y profesional. No lo cuentes – JimDaniel

+1

Umm, creo que con LPGL no está permitido el enlace estático? ¿Y mi código tiene que ser de código abierto? Traté de leer el tema de la licencia, pero fue un lol TLDR masivo, así que pensé que wxWidgets sería la opción más apropiada. ¿Talvez no? – Daniel

+0

LGPL significa que debe proporcionar los archivos de objeto de su aplicación para permitir volver a enlazar con dlls QT más nuevos ... o algo por el estilo :) Es por eso que utilizo wxWidgets, ¡sin inconvenientes! –

Respuesta

8

Mi sugerencia es aprender cómo hacer el diseño de la GUI con wxWidgets en el código, luego, cuando te vayas bien, aprende a usar las herramientas de la GUI.

Hacer este tipo de trabajo manualmente durante un tiempo le proporciona la comprensión de lo que necesita ("Ok, necesito un wxSizer, vertical, para poner estos dos wxSizers horizontales en, donde pongo un wxStaticText y un wxTextCtl para cada línea ... ") ... donde como creo que si comenzaste con las herramientas de la GUI solo te molestabas porque (la última vez que lo busqué) ninguno de ellos eran editores de arrastrar y soltar como tú. RED.

+0

Ok gracias, comenzaré con ese – Daniel

+0

+1 por este buen consejo. ¡Comenzar de esta manera es una buena idea! –

+0

+1 para visualizarlo en tu cabeza. Creo que si no puedes imaginar cómo hacerlo manualmente, no podrás corregirlo en un editor de arrastrar y soltar de todos modos. – Dashogun

0

Hay wxGlade y wxFormBuilder.

No sé si hay otro, pero el wxFormBuilder que conozco es gratuito y de código abierto.

Encontrará enlaces a otras herramientas en la página de inicio de wxGlade (http: // wxglade.sourceforge.net/).

La mayoría de estos programas pueden generar archivos xrc, que son una representación XML de su GUI. Aborda el problema de la complejidad del código generado, pero no es tan poderoso.

Sin embargo, personalmente no uso ninguna de estas herramientas, excepto algunas veces para ver cómo se verá antes de hacerlo, pero nunca para generar códigos.

0

Uso wxWidgets sin utilizar un diseñador de arrastrar y soltar.Obviamente, hay inconvenientes en ese enfoque, pero una ventaja es que no tiene que tratar con ningún código horrible generado automáticamente. En el pasado, descubrí que tener ese código en medio de mi proyecto me causó varios tipos de duelo, especialmente si decides que necesita algunos cambios serios, a menudo es necesario comenzar desde cero porque los diseñadores de formularios son mucho mejores para "escribir "a diferencia de" edición ".

Para aplicaciones simples, puede armar una interfaz de usuario utilizando una combinación de widgets personalizados y estándar sin demasiada dificultad. Consulte las muestras y demos de wxWidgets, que usan ese enfoque. Mi aplicación de ajedrez (ver mi sitio web) también utiliza este enfoque.

Una interfaz de usuario más elaborada podría posiblemente implementarse escribiendo algo especial en un nivel más alto de abstracción. El tipo de cosa en la que estoy pensando sería un subsistema que acepta solicitudes flexibles de alto nivel para proporcionar diferentes tipos de funcionalidad de interfaz de usuario, y luego clasifica los detalles de los controles para crear y el posicionamiento etc. de esos controles. Esa es una especie de fantasía técnica mía, pero realmente nunca he intentado hacerlo. En realidad, una instalación bastante primitiva de este tipo ya está disponible y utilizada por las demostraciones que mencioné; Se llama "Sizer" (clase wxSizer) y básicamente es un contenedor de control.

Finalmente, quisiera señalar que los problemas con la licencia Qt básicamente se han ido desde que Nokia compró Trolltech y lo hizo "más" gratis (licencia LGPL). Mucha gente piensa que Qt es el camino a seguir en estos días. Estoy muy contento con wxWidgets, pero definitivamente evaluaré Qyt en serio algún día. Buena suerte con tus proyectos.

+0

Cierto, en C# generalmente decide convertir las cosas al azar en algo invisible y es muy molesto, estas cosas de Sizer suenan un poco como un acoplamiento inverso. Enfriar gracias por su entrada – Daniel

+0

Sizers son una herramienta maravillosa en manos de alguien que sabe lo que están haciendo. –

1

Definitivamente da Code::Blocks otra oportunidad. Es un entorno MARAVILLOSO para trabajar con wxWidgets. Viene con un diseñador de formularios y plantillas para proyectos wxWidgets, por lo que no puedo imaginar trabajar sin él.

Además, para la introducción de un buen principiante a wxWidgets, pruebe la página this. Me ayudó mucho cuando comencé con esto.

+0

El tutorial al que vincula se ve bien, ojalá lo hubiera sabido antes. Es interesante, sin embargo, todas mis experiencias con MFC han sido diabólicas, cada problema que he tenido ha requerido buscar un hechizo extraño proporcionado por un experto en algún lugar de la red. Casi todos los problemas que he tenido con wxWidgets he podido resolverlos por mi cuenta con la lógica normal del programador. Problema de ejemplo simple; Cambiar el color del texto estático. Solución MFC; Interceptar un montón de mensajes de Windows, etc. Solución wxWidgets; Llame al método .color() en el control. Mi conclusión; MFC es solo superficialmente similar a wx. –

+0

¡MFC es horrible! Nunca lo usaría. E incluso si tuviera que hacerlo, lo odiaría. –

+0

Sí, estoy totalmente de acuerdo. Por lo tanto, es sorprendente la frecuencia con que el mantra de que wxWidgets es simplemente un tipo de armazón portátil de MFC. Mi experiencia es que aunque existe una similitud superficial, MFC es un problema, mientras que wxWidgets es una solución. (En caso de que sea confuso por qué estoy hablando en exceso sobre esto, el otro tutorial agradable al que se vinculó en su respuesta gasta mucho espacio en la similitud entre MFC y wxWidgets). –

0

wxFormBuilder pero cuesta dinero

wxFormBuilder es de código abierto y libre

También Visual Studio es mejor para C++ de codificación en wxWidgets, pero que se ejecutará en un montón de problemas en Linux debido a la forma en que Visual Studio maneja muchas cosas, como los nombres de los archivos, debe tener especial cuidado con la distinción entre mayúsculas y minúsculas.

También con respecto a la GUI, agregue wxFormBuilder a la solución de Visual Studio, agregue el manejador de tipo de archivo a Visual Studio. Ahora solo haga doble clic en él y agregue sus cuadros de diálogo, como lo hace en C#. Simplemente agregue los archivos de código generados al proyecto de Visual Studio una vez y listo.

Es muy fácil usar Visual Studio con programación GUI en wxWidgets.

Además, no olvide ver el editor CodeLite si desea realizar un puerto en Linux. Es muy compatible con los proyectos de Visual Studio y las teclas de método abreviado.

+0

¡Ah! wxWidgets en VC++: una receta para problemas. Ver http: // stackoverflow.com/questions/1916782/static-library-links-in-wxwidgets-static-but-apps-using-my-lib-still-require y http://stackoverflow.com/questions/134029/wxwidgets-setup-h- no-such-file –

+0

Muy en desacuerdo, necesitas algo de experiencia para comenzar, pero una vez que arrancas, es muy rápido programar usando VS. Y puedo decir esto porque hace mucho tiempo que escribí una herramienta de integración de integración wxVS2008 (no hay más disponible), y es muy fácil de usar VS en comparación con cualquier otro IDE. –

+0

Habiendo utilizado tanto VC++ como CodeBlocks, honestamente puedo decir que CodeBlocks es mejor. No es perfecto, pero aún mejor. –

0

que han desarrollado una serie de interfaces gráficas de usuario de aplicaciones usando wxWidgets - se puede ver capturas de pantalla en http://ravenspoint.com/

en mi humilde opinión, se debe distinguir entre el diseño de una interfaz gráfica de usuario y la aplicación. Esperando usar el mismo programa para diseñar su GUI y emitir automáticamente todo el código para implementar el diseño está esperando demasiado.

Un programa de diseño debe ser rápido y simple. Recomiendo http://www.balsamiq.com/

Una vez que se haya decidido por el diseño, puede consultar la codificación. Personalmente, considero que colocar widgets en un panel usando los parámetros wxPosition y wxSize de los wxWidget constructores es trivial, más fácil que tratar de empujar los widgets en sus posiciones exactas con el mouse.

El problema con el uso de algún tipo de generador de formularios para emitir todo el código de una GUI significativa es que terminas con un cúmulo de código generado automáticamente que es difícil de encontrar. Si el código ha sido escrito a mano , entonces ya sabes dónde está ubicado todo.

+1

Sé que esto no es una solución, pero lo que hago es usar un RAD para diseñar el formulario, luego copiar y pegar el código en un editor y 'arreglarlo'. Luego lo integro en el código fuente de la aplicación. –

+0

George: es una solución si funciona para usted. Sin embargo, el paso de 'arreglarlo' me parece tedioso. Me pregunto si alguna vez produciría un código de fácil mantenimiento con, por ejemplo, nombres de variables significativos y orden de código. El problema tanto con su enfoque como con el mío es, por supuesto, la iteración del diseño. Al menos las maquetas de GUI de balsamiq no pretenden emitir código, y no tengo que editar una mezcla de código generado por máquina y humano, es todo mi propio trabajo, para bien o para mal. Después de un tiempo, aprende a escribir código GUI que es fácil de ajustar cuando los clientes piden cambios. – ravenspoint

0

Acabo de terminar de hacer un programa hello world en wx y fltk usando netbeans IDE. Microsoft Visual Studio WinForms o MFC era mucho más fácil que cualquiera de los dos. Necesitaba capacidad de plataforma cruzada, así que no pude usarla para esta aplicación. Terminé fltk en mucho menos tiempo que wx. El programa era más simple, más pequeño, más rápido y más fácil de escribir. Wx tenía documentación y organización bastante inconexa. Fltk fue diseñado en los "viejos tiempos" cuando era pequeño, rápido y eficiente. Probablemente sea por eso que te parece "viejo". Soy un tipo viejo, así que funcionó para mí. YMMV