Soy nuevo en Qt y no entiendo bien la diferencia entre un Qt Quick Project y un Qt Widget Project.
Espero crear un programa que dibuje un entramado de hexágonos que el usuario pueda rotar y cortar, así como desplazarse y acercarse y alejarse. Eventualmente será un controlador MIDI. ¿Qué tipo de proyecto sería mejor para esto y por qué?
Espero que esto funcione tanto en plataformas de escritorio como móviles.
Respuestas:
Nota: los widgets de Qt se han reemplazado por los widgets de QML; esta respuesta responde a la pregunta tal como se hizo, que ahora es estrictamente una pregunta histórica sobre los viejos Qt Widgets.
Qt Quick es una interfaz de usuario declarativa al estilo de un teléfono inteligente que admite muchas de las geniales transiciones de animación que son comunes en las aplicaciones para teléfonos inteligentes. Quick también es una buena opción para desarrollar rápidamente un prototipo. Qt Widget es el modelo tradicional de interfaz de usuario orientado al escritorio.
En este momento (antes de Qt5), falta el soporte Qt Quick para las funciones del sistema de escritorio (pero está mejorando). No hay tanto soporte para menús, barras de herramientas, cuadros de diálogo y otros comportamientos de escritorio estándar en Quick, mientras que Widget admite esos elementos extremadamente bien.
¿Quiere que su aplicación se vea y se sienta nativa en plataformas de escritorio y tabletas, o está creando una aplicación simple alrededor de su propio widget de interfaz de usuario personalizado? Como dijo Mat, si Qt Quick admite las funciones que desea, probablemente será su enfoque más rápido. Si desea crear versiones de escritorio con todas las funciones, Qt Widget es probablemente su mejor opción.
fuente
Como alguien que desarrolla aplicaciones qt profesionalmente, elegiré qml en lugar de widgets cualquier día.
Los widgets son buenos para las cosas más básicas, pero una vez que necesitas crear algo que sea un poco más elegante, los widgets se quedarán cortos muy pronto.
Qml es simplemente mucho más flexible, puede anclar elementos donde desee en lugar de utilizar el sistema de diseño limitado de widgets. Casi no hay fallas de dependencia de la plataforma, mientras que los widgets están llenos de estos. Y el sistema de enlace de propiedades hace que sea muy fácil mantener su interfaz de usuario sincronizada con su modelo.
fuente
Nota : En esta respuesta, "Qt Widgets" se refiere a una aplicación Qt Widgets, que se puede seleccionar al crear una nueva aplicación Qt.
Esto es siete años después de que se publicó la pregunta ... pero aquí está mi " objetivo " de dos centavos para neutralizar cualquier desarrollo desde entonces.
Un repaso
Idioma
Los proyectos de Qt Quick utilizan QML y JavaScript .
Los proyectos de Qt Widgets utilizan código C ++. (PyQt y PySide, enlaces de Python para Qt, usa Python).
Rendimiento y codificación
Como tal, Qt Widgets podría considerarse de bajo nivel en comparación con Qt Quick. Pero esto implica que, a la larga, un proyecto de Qt Widgets se ejecutará más rápido y tendrá un mejor rendimiento. Sin embargo, ser de bajo nivel puede ser bueno, ya que Qt Widgets está más expuesto a la API nativa (el módulo QtCore , Qt Style Sheets , etc.). Dicho esto, a menudo se usa para el desarrollo de escritorio.
Qt Quick se adapta más al desarrollo móvil (aunque todavía se puede utilizar en el desarrollo de escritorio). Tiene ventanas emergentes , animaciones , pestañas y diseños listos para usar , elementos deslizables , cajones y los controles habituales; todo omnipresente en el desarrollo móvil.
Diseño de UI
Ambos tienen
ui
archivos que funcionan con QtDesigner, lo que proporciona una vista de alto nivel para configurar diseños y crear interfaces. (En Qt Quick, las extensiones son.ui.qml
. En Qt Widgets, lo son.ui
.) Los.ui
archivos no son obligatorios ni necesarios: tiene la opción de hacer diseño y maquetación mediante programación usando QML / JS o C ++ / Python.Aprendizaje
Si eres completamente nuevo en la programación, te sugiero que primero eches un vistazo a Qt Quick. Personalmente, creo que Qt Quick tiene una curva de aprendizaje más suave y es más fácil trabajar con él para lograr innumerables proyectos. Se llama "Qt Quick " por una razón. (Sin embargo, no menosprecie los widgets de Qt, tienen algunos módulos agradables que superan a QtQuick).
Sin embargo, si has estado en la programación con C ++ o Python antes, sugeriría echar un vistazo a Qt Reproductores primero, para acostumbrarse a sus señales y mecanismo de ranura y módulos que usted (por ejemplo, podría interesar
sql
,network
,gui
) junto con la programación de diseños (por ejemplo, programación de modelo / vista para mostrar datos).Especialmente con C ++, la mayoría de las bibliotecas que no son de Qt que manejan
while
eventos usan bucles, este no es el caso de Qt. Usan señales y ranuras .Al final, incluso si está utilizando principalmente Qt Widgets, es posible que desee mirar Qt Quick, ya que ofrece un lenguaje declarativo de alto nivel para trabajar y le permite configurar las cosas más rápidamente. (Especialmente para desarrollo móvil).
Qt proporciona ejemplos en abundancia para proyectos Qt Quick y Qt Widget , junto con un foro . No debe preocuparse por obtener ayuda a largo plazo. (¡No olvide StackOverflow!)
Qt Quick + Qt Widget
Hasta ahora los hemos tratado como entidades separadas. Pero es posible integrar QML en C ++ . Esto le permite aprovechar Qt Widget, C ++ y otros módulos. Por ejemplo, QtQuick proporciona un
TreeView
pero no unTreeModel
, que puede / debe registrarse en QML desde C ++. A menudo hay una separación de temas de interés, donde Qt recomienda separar los programas en UI y la lógica en QML y C ++ respectivamente.Esto también es útil, si por ejemplo, necesita un backend para consultas SQL intensas, algoritmos o solicitudes http / xml asíncronas. ¿No es genial? Interfaz QML / JS más un backend C ++. Fullstack Qt'er. :-)
(Lo que no he probado es tener un backend de Python. Todavía no he tocado PyQt ...)
fuente
Qt Quick tiene como valor predeterminado QML, dialecto declarativo JSON con ECMAscript en línea habilitado. Con los widgets Qt, el diseñador puede crear hojas de estilo y el desarrollador realiza la codificación nativa de C ++.
QML se procesa en tiempo de ejecución. Dentro del marco, todo puede funcionar en conjunto, las diferencias solo agregan flexibilidad a la toma de decisiones del arquitecto de software.
fuente
En primer lugar, creo que deberías empezar con Widget. La interfaz de usuario del widget ayuda a aprender qt fácilmente, además, si sus experiencias anteriores se refieren a cosas de front-end que aprendería rápidamente.
fuente