Saltar al contenido

Qt Quick vs Qt Widget

Ya no necesitas buscar más en internet porque llegaste al sitio adecuado, tenemos la respuesta que quieres y sin complicarte.

Solución:

Nota: Qt Widgets se han reemplazado con QML Widgets; esta respuesta responde a la pregunta formulada, que ahora es estrictamente una pregunta histórica sobre los antiguos Qt Widgets.

Qt Quick es una interfaz de usuario declarativa al estilo de un teléfono inteligente compatible con 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 de interfaz de usuario tradicional orientado al escritorio.

En este momento (anterior a Qt5), falta la compatibilidad con Qt Quick para las funciones del sistema de escritorio (pero está mejorando). No hay tanta compatibilidad con los menús, las barras de herramientas, los 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 en torno a su propio widget de interfaz de usuario personalizado? Como dijo Mat, si Qt Quick es compatible con las funciones que desea, ese será probablemente su enfoque más rápido. Si desea crear versiones de escritorio con todas las funciones, Qt Widget es probablemente su mejor opción.

Nota: En esta respuesta, “Qt Widgets” se refiere a una aplicación Qt Widgets, seleccionable al crear una nueva aplicación Qt.

Esto es siete años después de que se publicó la pregunta por primera vez… pero aquí está mi “objetivo” dos centavos para neutralizar cualquier desarrollo desde entonces.

un repaso

Idioma

Los proyectos Qt Quick usan QML y JavaScript.

Los proyectos de Qt Widgets usan código C++. (PyQt y PySide, enlaces de Python para Qt, usan 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 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, las hojas de estilo Qt, 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 usar en el desarrollo de escritorio). Tiene ventanas emergentes listas para usar, animaciones, pestañas y diseños, deslizables, cajones y los controles habituales; todo omnipresente en el desarrollo móvil.

Diseño de interfaz de usuario

Ambos tienen ui archivos que funcionan con QtDesigner, proporcionando una vista de alto nivel para configurar diseños y crear interfaces. (En Qt Quick, las extensiones son .ui.qml. En Qt Widgets, son .ui.) Los .ui Los archivos no son obligatorios ni necesarios: tiene la opción de hacer el diseño y los diseños mediante programación usando QML/JS o C++/Python.

Aprendiendo

Si eres completamente nuevo en la programación, sugiero echar un vistazo a Qt Quick primero. Personalmente, creo que Qt Quick tiene un más suave curva de aprendizaje y es más fácil trabajar con él para lograr miles de proyectos. Se llama “Qt Rápido” por una razón. (Sin embargo, no menosprecie los Qt Widgets, tienen algunos módulos agradables que superan a QtQuick).

Sin embargo, si ha estado programando con C++ o Python antes, le sugiero que primero eche un vistazo a Qt Widgets, para acostumbrarse a sus señales y mecanismos de ranura y módulos que podrían interesarle (p. ej. sql, network, gui) junto con diseños de programación (por ejemplo, programación de modelo/vista para mostrar datos).

Especialmente con C ++, la mayoría de las bibliotecas que no son Qt que usan el manejo de eventos while-bucles, este no es el caso con Qt. Utilizan señales y ranuras.

Al final, incluso si usa principalmente Qt Widgets, es posible que desee ver 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 el desarrollo móvil).

Qt proporciona abundantes ejemplos para los proyectos Qt Quick y Qt Widget, junto con un foro. No debe preocuparse por obtener ayuda a largo plazo. (¡No olvides StackOverflow!)

Qt Rápido + Qt Widget

Hasta ahora los hemos estado tratando 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 una TreeView pero no un TreeModel, que puede/debe registrarse en QML desde C++. A menudo hay un tono de separación de preocupaciones, donde Qt recomienda separar los programas en UI y lógica en QML y C++ respectivamente.

Esto también resulta útil si, por ejemplo, necesita un back-end para consultas SQL intensas, algoritmos o solicitudes http/xml asincrónicas. ¿No es genial? Frontend 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…)

Como alguien que desarrolla aplicaciones qt profesionalmente, elegiré qml sobre widgets cualquier día.

Los widgets son buenos para cosas muy básicas, pero una vez que necesites 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 quiera 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 ellas. Y el sistema de vinculación de propiedades hace que sea muy fácil mantener su interfaz de usuario sincronizada con su modelo.

Te mostramos comentarios y calificaciones

Si te ha resultado de utilidad nuestro artículo, te agradeceríamos que lo compartas con otros programadores de esta manera contrubuyes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *