2008-12-22 20 views
106

Estoy pasando estas vacaciones aprendiendo a escribir aplicaciones Qt. Estuve leyendo acerca de Qt Designer hace unas pocas horas, lo que me hizo preguntarme: ¿qué usan las personas que escriben aplicaciones del mundo real en Qt para diseñar sus GUI? De hecho, ¿cómo las personas diseñan GUI en general?GUI codificada a mano Versus GUI de Qt Designer

Yo, por ejemplo, descubrí que escribir el código a mano era conceptualmente más simple que usar Qt Designer, aunque para las interfaces gráficas complejas el diseñador podría tener sentido. Es posible utilizar GUI grandes con Designer, pero con el tiempo pueden ser muy difíciles de administrar a medida que aumenta la complejidad (esta es solo mi opinión). También descargué el código fuente de AmaroK para echar un vistazo a lo que estaban haciendo esos tipos, y encontré muchas llamadas a addWidget() y amigos, pero ninguno de esos archivos XML creados por Designer (aparte: AmaroK tiene que ser mi aplicación favorita siempre en cualquier plataforma).

¿Cuál es, entonces, la forma "correcta" de crear una GUI? Diseñador o código? Permítanos, para esta discusión, considerar los siguientes tipos de GUI:

  1. Cuadros de diálogo sencillos que solo necesitan ingresar, mostrar algunos resultados y salir. Supongamos una aplicación que toma una URL de YouTube y descarga el video en el disco duro del usuario. El tipo de aplicaciones con las que es probable que empiece un novato.
  2. GUI de nivel intermedio como, por ejemplo, un editor de notas adhesivas con algunas barras de herramientas/elementos de menú. Tomemos xPad por ejemplo (http://getxpad.com/). Yo diría que la mayoría de las aplicaciones caen en la categoría de "utilidades".
  3. GUI muy complejas, como AmaroK u OpenOffice. Los conoces cuando los ves porque te hacen sangrar los ojos.

Respuesta

41

Nuestra experiencia con Designer comenzó en Qt3.

Qt3

En ese punto, diseñador fue útil principalmente para generar código que usted entonces compilar en su aplicación. Empezamos a usar para ese fin, pero con todo el código generado, una vez que lo edite, ya no podrá regresar y regenerarlo sin perder sus ediciones. Terminamos tomando el código generado y haciendo todo a mano de ahora en adelante.

Qt4

Qt4 ha mejorado significativamente el diseñador. Ya no solo genera código, sino que puede cargar dinámicamente sus archivos de Designer (en xml) y dynamically connect them to the running objects in your program, sin código generado, sin embargo, debe nombrar los elementos en Designer y conservar los nombres para no romper su código.

Mi opinión es que no es ni de lejos tan útil como Interface Builder en Mac OS X, pero en este punto, pude ver el uso de los archivos de Designer directamente en un programa.

No hemos retrocedido al Diseñador desde Qt3, pero seguimos utilizándolo para crear prototipos y depurar diseños.

para sus problemas:

  1. Usted probablemente podría salirse con el uso de los cuadros de diálogo estándar que ofrece Qt. QInputDialog o si subclase QDialog, asegúrese de usar QButtonDialogBox para asegurarse de que sus botones tengan el diseño de plataforma adecuado.

  2. Probablemente pueda hacer algo más limitado como xPad con funcionalidad de diseñador limitada.

  3. No creo que puedas escribir algo así como OpenOffice solo con Designer, pero quizás ese no sea el punto.

Usaría Designer como otra herramienta, como su editor de texto. Una vez que encuentre las limitaciones, intente con una herramienta diferente para ese nuevo problema. Estoy totalmente de acuerdo con Steve S en que una de las ventajas de Designer es que alguien más que no sea programador puede hacer el diseño.

+22

Nunca debería haber una necesidad de modificar el código generado por uic (el compilador de archivos .ui). Si se necesita más funcionalidad, creó una nueva clase que hereda de la clase generada o la incluye como miembro y agrega el código necesario. –

+1

Vale la pena señalar que en Qt3 y principios de Qt4 (circa 2008), Qt Designer carecía de una serie de características que pueden haber sido sorprendentes para algunos, como la falta de soporte para grupos de botones, ranuras personalizadas, nombrar QLayouts, etc. Pero durante los últimos 5 -6 años más o menos, todos esos problemas han sido abordados. Prefiero usar archivos UI si puedo, es mucho más fácil reorganizar diseños y resulta en mucho menos código para mantener. –

41

En mi experiencia con Qt Designer y otros kits de herramientas/UI-herramientas:

  • herramientas de interfaz de usuario acelerar el trabajo.
  • Las herramientas de IU hacen que sea más fácil ajustar el diseño más tarde.
  • Las herramientas de IU hacen que sea más fácil/posible para los no programadores trabajar en el diseño de la IU.

La complejidad a menudo puede tratarse en una herramienta de interfaz de usuario dividiendo el diseño en varios archivos de interfaz de usuario. Incluya pequeños grupos lógicos de componentes en cada archivo y trate a cada grupo como un widget único que se usa para construir la interfaz de usuario completa. El concepto de Qt Designer de widgets promocionados puede ayudar con esto.

No he encontrado que la escala del proyecto haga la diferencia. Tu experiencia puede variar

Los archivos creados con herramientas de IU (supongo que podría escribirlos a mano si realmente lo desea) a menudo se pueden cargar dinámicamente en tiempo de ejecución (Qt y GTK + proporcionan esta característica). Esto significa que puede hacer cambios de diseño y probarlos sin volver a compilar.

En última instancia, creo que tanto el código sin formato como las herramientas de IU pueden ser efectivos. Probablemente dependa mucho del entorno, del toolkit/UI-tool y, por supuesto, de las preferencias personales. Me gustan las herramientas de UI porque me ayudan a acelerar y permiten cambios fáciles más adelante.

5

Es extraño que diga que el código de escritura es más simple que manipular objetos en un entorno gráfico. Es una obviedad.
El diseñador está ahí para hacerte la vida más fácil y, a largo plazo, hace que tu código sea más fácil de mantener. Es más fácil buscar en el diseñador para ver cómo se ve su UI luego de leer el código e intentar imaginar cómo se vería.
Con Qt actual puede hacer casi todo desde el diseñador y las pocas cosas que no puede hacer, puede arreglarlo con muy pocas líneas de código en el constructor. Tomemos, por ejemplo, el ejemplo más simple: agregar una conexión de ranura de señal. Usar el diseñador es tan simple como hacer doble clic. Sin el diseñador, debe buscar la firma correcta de la señal, editar el archivo .h y luego editar escribir su código en el archivo .cpp. El diseñador le permite estar por encima de estos detalles y enfocarse en lo que realmente importa: la funcionalidad de su aplicación.

+3

Sí, me sorprendió, pero desde hace unos años cuando uso Qt durante 1 año me di cuenta de que puedo hacer trabajos de ui más rápidos escribiendo a mano que diseñando gráficamente. Una cosa que carece de ui codificado escrito a mano es que no se puede ver fácilmente cómo se ve hasta que se ejecuta en la pantalla (y es un aspecto importante de los trabajos cooperativos a veces). – Joonhwan

+1

Lo mismo ella, no puedo tolerar diseñadores, escribir a mano es mucho más poderoso y más rápido para mí, bueno, esto es porque originalmente estaba en Mac muy lento, que apenas manejaba arrastrar y soltar, y después de algunos años se convirtió en el único forma en que puedo hacer diseños :) Acerca de no se puede ver, después de un año no tuve que ejecutarlo, todo estaba mapeado en mi capa de imaginación de mi cerebro. – ColdSteel

7

La organización para la que trabajo ha portado su aplicación GUI en Qt hace varios años. Creo que hay varios aspectos que vale la pena mencionar:

  • Trabajar con Qt Designer, al menos en ese momento, no era una opción realista: había demasiadas características que no se podía hacer con Qt Designer;
  • Las convenciones y la estructura que se tenía que preservar impedían el uso de Qt Designer;
  • Una vez que haya comenzado sin Designer, probablemente sea difícil volver a él;
  • el aspecto más importante, sin embargo, era que los programadores estaban muy acostumbrados a programar usando vi o emacs, en lugar de usar un GUI IDE.

Mi propia experiencia, que se remonta aprox. 4 años, usando Qt3.3, es que el comportamiento dinámico en diálogos no fue posible de realizar en Designer.

4

Me gusta primero recurrir al diseñador para desarrollar widgets de GUI. Como se menciona en las otras publicaciones, es más rápido. También recibe comentarios inmediatos para ver si "se ve bien" y no confunde al usuario. El diseñador es una de las principales razones por las que elijo Qt sobre otros kits de herramientas. Uso principalmente el diseñador para hacer los diálogos únicos.

Habiendo dicho eso, hago la ventana principal y los widgets complejos a mano. Creo que esta es la intención de Trolltech. QFormLayout es una clase que proporcionan para crear fácilmente un diálogo de entrada programáticamente.

Por cierto, el diseñador en Qt 4 no es un IDE como el que tenían en Qt 3. Es solo un editor para editar archivos .ui. Me gusta de esa forma. El nuevo IDE multiplataforma se llamará Qt Creator.

8

Solo para decir que he escrito y mantenido GUI complejas en Qt sin usar Qt Designer, no porque no me guste Qt Designer, sino porque nunca funcioné de esa manera.

Es en parte una cuestión de estilo y de dónde vienes: cuando comencé con Qt, tuve experiencias horribles con Dreamweaver y Frontpage y otras herramientas visuales de HTML, y prefiero escribir código con HomeSite y recurrir a Photoshop para problemas de diseño difíciles.

Existe un peligro con IDEs de código visual que intenta mantener dentro de las herramientas visuales, pero también termina teniendo que modificar el código de una manera que no se entiende bien.

Aprendiendo el desarrollo de un iPhone, por ejemplo, he encontrado frustrante tocar cosas visuales 'mágicas' ('arrastre desde el círculo vacío en el inspector de Connections al objeto en la ventana Interface Builder ...') que haría ser más simple (para mí) para entender en código antiguo.

Buena suerte con Qt: es un gran juego de herramientas, como sea que lo uses, y Qt Creator parece ser un gran IDE.

7

Me gustaría añadir que una de las razones para usar el diseñador gráfico fue la falta de administradores de diseño en Win32, por ejemplo. Solo el posicionamiento absoluto era posible, y hacerlo a mano hubiera sido una mierda.

Desde que cambié de Delphi a Java para aplicaciones de GUI (en 2002), nunca más he usado diseñadores. Me gustan los administradores de diseño mucho más. Y sí, obtienes un código repetitivo, pero mover objetos en un diseñador de UI puede tomar tanto tiempo como cambiar el texto estándar. Además, estaría atrapado con un IDE lento; eso es para el caso de Java/C#, OK, mientras que para Qt (especialmente Qt4) no se aplica. Para Qt3, me pregunto por qué uno debería editar el código generado, ¿no era posible agregar código en otros archivos? ¿Por qué razón?

Acerca de los casos discutidos: 1) La GUI codificada a mano es probablemente más rápida de escribir, al menos si conoce sus bibliotecas.Si eres un novato y no los conoces, puedes ahorrar tiempo y aprender menos con un diseñador, ya que no necesitas aprender las API que usas. Pero "aprender menos" es el factor clave, por lo que en ambos casos diría que es una GUI codificada a mano.

2) Las barras de menú son bastante molestas para escribir el código. Además, piense en detalles como aceleradores, etc. Aún así, depende de a qué estás acostumbrado. Después de un tiempo, puede ser más rápido escribir ese texto estándar que apuntar y hacer clic en el diseñador para corregir todas esas propiedades, pero solo si realmente puede escribir como en una máquina de escribir (como aquellos administradores para los que escribir comandos Unix es más rápido que usando cualquier GUI).

3) Extendería la respuesta para el caso # 2 a este. Tenga en cuenta que, para las plataformas Win32, es posible que el uso de diseñadores que generan recursos de Win32 sea más rápido de cargar (ni idea de eso).

Sin embargo, me gustaría mencionar un posible problema con el uso de Qt Designer allí. Caso del mundo real: llevó unos segundos (digamos 10) cargar un diálogo complejo de Java (el cuadro de diálogo de Preferencias para el editor de texto de un programador) con muchas opciones. La solución correcta habría sido cargar cada una de las pestañas solo cuando el programador quería verlas (me di cuenta después), agregando un método diferente para cada conjunto de preferencias para construir su GUI.

Si diseña todas las pestañas y el separador de pestañas junto con un diseñador, ¿puede hacerlo tan fácilmente? Supongo que podría haber un ejemplo similar en el que una GUI codificada a mano te brinde más flexibilidad, y en una aplicación tan grande, es probable que la necesites, aunque solo sea para fines de optimización.

+5

Los administradores de diseño no son mutuamente excluyentes con los diseñadores de GUI. De hecho, cualquier diseñador de GUI que no utilice algún tipo de concepto de administrador de disposición es peor que inútil para trabajar en el 99% de las aplicaciones modernas de GUI. –

2

Estamos utilizando el Qt Designer si alguien necesita crear una Gui.
El objetivo es crear pequeños widgets para ciertas tareas (como lo haría en un diseño de clase) y luego juntarlos en una "guía para padres".

De esta forma, sus widgets son altamente reutilizables y podrían utilizarse para Guis de forma modular. Solo tiene que especificar qué señales está enviando cada widget y qué ranuras ofrecen.

Además, estamos creando .ui-Files que podrían generarse durante el proceso de compilación. Hasta ahora no había necesidad de editar esos archivos a mano.

4

Es una publicación anterior pero te aconsejo que mires a Clementine, un reproductor de música que (creo) se deriva de Amarok. Usan Qt4 y de lo que puedo ver hay una carpeta ui en la carpeta src del proyecto. En la carpeta ui, como cabría esperar, tienen todo tipo de archivos .ui. Si compila e inicia Clementine, verá que la GUI es bastante compleja y bastante agradable.

6

Uno de los principales beneficios de utilizar el diseñador para crear GUI es que otros programadores pueden cambiar o mantener formularios y widgets fácilmente sin la necesidad de profundizar en un código complejo.

3

Para mí, depende de cuánto lógica está encapsulado en el widget/GUI. Si se trata de formularios simples, prefiero usar QtDesigner.

Si contiene controles complejos o interacción, tiendo a programarlo.

+0

Tengo varios cuadros de diálogo de Windows en una aplicación MFC que son todos muy similares. Recientemente traté de poner todos los controles en un solo diálogo y ocultar y reposicionar ciertos controles basados ​​en el modo actual de la aplicación. ¿Estás diciendo que en Qt puedes simplemente construir los controles programáticamente? Me he estado preguntando si eso sería más fácil en mi caso. Me encantaría conocer tu opinión. – mitch

+0

Mitch, sí en Qt puedes construir controles programáticamente, y es MUY fácil. Además, Qt usa el diseño dinámico, lo que significa que su diálogo aún se ve bien y se puede usar si agrega una casilla de verificación o veinte. –

0

Construir diferentes partes de la interfaz de usuario
en diferentes archivos .ui utilizando QtDesigner,
luego llevarlos juntos (y añadir complicaciones) en el código.

Hay cosas que no puede hacer en Qt Designer, sólo se puede hacer en el código, por lo que
diseñador Qt es sólo una (gran) parte de la cadena herramienta.

+0

Oh exactamente como dice @MOnsDaR – dave