2010-11-06 20 views
27

Cada vez que comienzo un proyecto con un conjunto de herramientas gráficas, uno de los primeros conflictos ocurre con la decisión de cómo tratar el diseño visual y el diseño del widget: ¿una herramienta gráfica o manual?Qt Designer vs Handcoding

Esta es una pregunta bastante complicada/subjetiva porque la mayoría de las personas decidirá según sus preferencias personales. También depende en gran medida de la calidad de la herramienta gráfica. En este caso, me gustaría centrarme solo en la última versión de la biblioteca QT. No pretendo discutir qué método es mejor. Estoy convencido de que la mejor respuesta es: depende del proyecto.

Lo que quiero es una referencia a un buen artículo no sesgado, basado en la experiencia después de varios proyectos. El artículo debería describir las compensaciones de ambas opciones

Respuesta

29

Empecé con hacer todo codificado a mano, y en los últimos tiempos he pasado al uso de Qt Designer para la mayoría de los formularios. Aquí están algunos de los beneficios para cada posición:

Usando Qt Designer

  • El mayor ahorro de tiempo para mí es la gestión de diseños complejos; ahorra un lote de codificación tediosa. Simplemente (muy aproximadamente) organice sus widgets, selecciónelos, haga clic con el botón derecho y colóquelos en el tipo correcto de diseño. Especialmente cuando los diseños se anidan, esto es por lo que es mucho más fácil.
  • Tiende a mantener sus archivos de implementación más limpios en lugar de llenarlos con todo el código de diseño repetitivo. Soy tipo A, así que me gusta eso.
  • Si está traduciendo su aplicación, es posible enviar a sus traductores los archivos .ui para que puedan ver en su GUI donde estará el texto que están traduciendo. (Suponiendo que están usando Qt Linguist.)

Hand-codificación de

  • de control. Si tiene un diseño donde necesita instanciar/inicializar los controles en un orden muy particular, o crear dinámicamente los controles en función de otros criterios (búsqueda de base de datos, etc.), esta es la manera más fácil.
  • Si tiene widgets personalizados, puede utilizar el Designer, añadiendo el QWidget integrado más cercano del que deriva su clase y luego "actualizándolo". Pero no verá una vista previa de su widget a menos que lo convierta en un complemento de diseñador en un proyecto separado, que es demasiado trabajo para la mayoría de los casos de uso.
  • Si tiene widgets personalizados que toman parámetros en su constructor más allá del padre QWidget opcional, Designer no puede manejarlos. No tiene más remedio que agregar ese control manualmente.

Varios

  • que no Use las ranuras y las señales de conexión automática de características (basado en la convención de nombres, tales como "on_my_button_clicked".) He encontrado que casi invariablemente para configurar esta conexión en un tiempo determinado, no siempre que Qt lo haga por mí. Para formularios QWizard, he encontrado que necesito usar un archivo de IU diferente para cada página Puede hacerlo todo en uno, pero se vuelve muy incómodo comunicarse entre páginas de cualquier forma personalizada.

En resumen, empiezo con Qt Designer y dejo que me lleve todo lo lejos que pueda, luego lo codigo manualmente desde allí. Eso es algo bueno sobre lo que genera Qt Designer: es solo otra clase que se convierte en miembro de tu clase, y puedes acceder a ella y manipularla según lo necesites.

+1

Con la codificación manual, no hay un código de diseño repetitivo si lo haces de la manera correcta. Eso está todo oculto en las clases de construcción de UI. Traducir también es fácil ya que puedes generar maquetas con texto de las mismas clases de construcción de IU. –

4

Tiendo a diseñar cuadros de diálogo con el diseñador, pero hago todo el manejo de eventos en el código principal. También hago todas las ventanas principales, barras de herramientas, menús en código directo.

El diseñador es frustrante - una lástima ya que los diseñadores basados ​​Sizer arrastre decente y soltar han existido desde hace más de una década

+0

+1 para la comprensión. También hice todo el manejo de eventos en el código principal, pero con el tiempo condujo a una gran sección con declaraciones de "conexión" para widgets triviales. Recientemente decidí hacer todo lo posible (es decir, con controles no dinámicos) con el diseñador (y admito que es un dolor). Al menos de esta manera hay una mayor separación de la GUI y el código. Por cierto, para los controles dinámicos, trato de usar un control ficticio en el diseñador y promocionarlo a la clase real, para que pueda tener una idea acerca de la GUI simplemente abriendo el archivo ui. – dashesy

0

que utilizan una combinación de ambos:

  1. Encuentro para las coordenadas x, y, Designer es el camino a seguir.

  2. Muchas de las otras propiedades de la interfaz de usuario, etc. se pueden establecer en su código.

Creo que intentar hacer una interfaz de usuario completamente a mano sería un proyecto muy lento. No es tan simple como configurar tablas HTML.

Sí, la versión 4 es mala, pero las personas en el trabajo que han usado la versión 3 dijeron que era REALMENTE mala. Montones de choques.

Yo, junto con mis compañeros QTers, realmente esperamos que la versión 5 sea una mejora.

Sé que esta es una vieja pregunta, pero espero que esto ayude! La experiencia de un hombre

+1

Nunca tuve una razón para usar las coordenadas x, y. Los diseños de Qt son potentes. Si usa las coordenadas xey, ¿qué sucederá cuando la ventana se vuelva a clasificar según el tamaño? HTML es una analogía pobre aquí, porque no debe usar tablas HTML para hacer diseños. Comparar los diseños de Qt con CSS tendría más sentido. –

13

Mi respuesta se basa en dos años desarrollando aplicaciones de bioquímica utilizando PyQt4 (enlaces de Python a Qt 4) y OpenGL. No he hecho C++ Qt, porque solo usamos C++ para algoritmos críticos para el rendimiento. Dicho esto, la API de PyQt4 se parece mucho a Qt4, por lo que aún se aplica mucho aquí.

Qt Designer

  • Buena
    • Exploración. Descubra qué widgets hay disponibles, los nombres de esos widgets, qué propiedades puede establecer para cada uno, etc.
    • Impulsa la separación de la lógica de la interfaz de usuario de la lógica de la aplicación.
  • Malo
    • Si es necesario agregar o eliminar los widgets en tiempo de ejecución, usted tiene que tener esa lógica en el código. Creo que es una mala idea poner tu lógica de UI en dos lugares.
    • Haciendo cambios a los diseños anidados. Cuando un diseño no tiene widgets, se colapsa y puede ser muy difícil arrastrar y soltar un widget en la ubicación que desee.

mano de codificación

  • Buena

    • rápido si se está muy familiarizado con Qt.
    • La mejor opción si necesita agregar o quitar widgets en tiempo de ejecución.
    • Más fácil que Qt Designer si tiene sus propios widgets personalizados.
    • Con disciplina, aún puede separar el diseño de la interfaz de usuario del comportamiento. Simplemente coloque su código para crear y diseñar widgets en un lugar, y su código para establecer señales y ranuras en otro lugar.
  • Malo

    • lenta si usted es nuevo a Qt.
    • No enforce separación del diseño del comportamiento.

Consejos

  • No se limite a saltar en la creación de sus ventanas. Comience por dibujar rápidamente varios diseños posibles, ya sea en papel o usando una herramienta como maquetas Balsamiq. Aunque podrías hacer esto en Qt Designer, creo que es demasiado tentador pasar mucho tiempo intentando que tus ventanas se vean bien antes de que incluso hayas decidido si es el mejor diseño.

  • Si utiliza Qt Designer para PyQt, tiene el paso adicional de ejecutar pyuic4 para compilar sus archivos * .ui en archivos de origen Python. Me resultó fácil olvidar este paso y rascarme la cabeza por un segundo por qué mis cambios no funcionaron.

  • Si codifica su interfaz de usuario a mano, le sugiero que coloque su código de diseño en un lugar y sus señales y ranuras en otro lugar. Al hacerlo, es más fácil cambiar la forma en que se organizan los widgets en una ventana sin afectar a la lógica de la aplicación. O puede cambiar algún comportamiento sin tener que recorrer todo el código de diseño.

Enjoy Qt! Ahora que estoy usando Java Swing para el trabajo, lo extraño.

0

Depende de la cantidad de ventanas/paneles diferentes que necesite para su aplicación. Si el número es pequeño, use una herramienta gráfica. Es mucho más rápido obtener algunas ventanas diseñadas perfectamente. Si el número es grande, la herramienta gráfica puede (y debe) solo usarse para prototipos. Debe codificar el diseño para poder realizar cambios en toda la aplicación a un costo aceptable.

Eso incluye crear un modelo de cómo funciona la interfaz de usuario de la aplicación y agregar y eliminar dinámicamente widgets en tiempo de ejecución. Para obtener un excelente ejemplo de dicho modelo (en un entorno diferente), eche un vistazo al glamour model para crear navegadores de objetos.

Me opongo a la sugerencia de que es complicado/subjetivo (al menos más que otras opciones de desarrollo). Es fácil encontrar los criterios para decidir. La experiencia personal y las preferencias son importantes para eso, ya que deciden cuándo se debe considerar pequeña la cantidad de ventanas diferentes. Lo mismo aplica para la calidad de la herramienta.

Cuestiones relacionadas