Qt Quick vs. Qt Widget [cerrado]

81

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.

Antonio
fuente
3
Dedique un poco de tiempo al sitio web de Qt Quick y observe los ejemplos. Si eso es lo que necesitas, úsalo. De lo contrario, obtuve el proyecto de widget Qt normal, pero las plataformas móviles posiblemente sean un problema.
Mat
Enlace actualizado para el comentario de Mat doc.qt.io/qt-5/qtquick-index.html
Ayxan Haqverdili

Respuestas:

39

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.

AndrewS
fuente
1
Me gustaría ambos. :) Usando Qt Widget por ahora.
Anthony
10
Esta respuesta debe eliminarse, editarse o rechazarse, ya que ahora estamos en una versión posterior de Qt 5.0, incluso nos estamos acercando a 6.0 y los Widgets de Qt fueron reemplazados por los Widgets de QML.
Ariel M.
15
QML NO es un reemplazo para Qt Widgets, incluso ahora en 2019, al menos hasta que reemplace proyectos como Qwt, QCustomPlot y muchos otros, lo que parece no ser el caso. Hasta que sea una forma más de implementación, ni más ni menos.
Andry
1
@Ariel M. Qt Widgets no se reemplaza y no puede ser, al menos hasta que todo se reescribe, lo cual no es el caso.
Andry
1
Qwt y QCustomPlot son proyectos de terceros y no forman parte de QtWidgets, por lo que es irrelevante si están o no portados. Además, Anthony es un novato y estaba preguntando sobre la creación de un controlador MIDI donde se necesitaría una interfaz de usuario muy personalizada (ver Arena, Lemur PS Elements y software similar). QML es el camino a seguir.
Ariel M.
37

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.

Teimpz
fuente
3
¡Gracias! Simplemente decidí comenzar con QML / QtQuick, en función de su experiencia profesional indicada en su respuesta. Solo tenga en cuenta que puedo usar fácilmente * .ui.qml de QtCreator y usarlo directamente en PyQt. ¡Resolví mi configuración inicial de Python + QtQuick!
swdev
2
Usar QtQuick para programas de escritorio complejos es una mala idea en el rendimiento ...
Yousha Aleayoub
¿Quizás no tienes suficiente experiencia con la API de diseños? ¿Algún ejemplo de lo que puede hacer con QML que no pueda hacer con los widgets? Estoy trabajando con Qt en aplicaciones con 10K de usuarios en todo el mundo durante más de 5 años y usamos widgets porque solo ellos brindan energía ilimitada. QML es bueno para prototipos y proyectos pequeños. Y sí, el rendimiento importa. Además, dado que QML funciona con OpenGL, esto es un obstáculo si su base de usuarios está llena de hardware antiguo.
Dalamber
37

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 uiarchivos 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 .uiarchivos 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 whileeventos 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 TreeViewpero no un TreeModel, 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 ...)

TrebledJ
fuente
7

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.

Chawathe Vipul S
fuente
5

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.

myd0
fuente