简单介绍Qt Quick、QML以及Qt Widgets之间的区别与联系

13 篇文章 5 订阅

🚀作者:CAccept
🎂专栏:Qt Quick
在这里插入图片描述

前言

之前都是一直在做Qt Widgets的项目,最近由于实验室要求,需要对QML和Qt Quick进行学习,但是自己对于它们之间的区别和联系还有点不清楚,所以在此进行总结,如果有不对的地方也请读者指出。
问题1:已经有了Qt Widgets,为什么还要引入QML和Qt Quick

回答问题1:引入QML和Qt Quick是为了更好地满足现代化UI界面(要炫酷和复杂的UI)的需求,提高开发效率和代码可维护性。同时,Qt Widgets和QML/Qt Quick可以灵活地结合使用。

问题2:QML和Qt Quick的区别是什么

回答问题2:Qt Quick其实是QML的框架,我们使用Qt Quick其实是为了更好更方便地使用QML(本质上还是使用QML),只不过相对于直接使用QML来说,Qt Quick提供了更多的工具和库,使得开发更加的高效和便捷。


Qt Widgets

Qt Widgets是Qt框架中的传统UI组件库,它提供了大量的UI组件和工具,可以用于开发桌面应用程序。Qt Widgets具有很高的性能和稳定性,而且与C++语言紧密集成,非常适合开发大型、复杂的桌面应用程序(这也是相对与QML来说很大的一个优势)。

Qt Widgets的发展

Qt Widgets是Qt框架中最早的UI组件库之一,它提供了很多常见的UI组件和工具,如窗口、按钮、标签、文本框、列表框、滚动条等等。Qt Widgets使用C++语言编写,与操作系统API的交互更加紧密,因此具有很高的性能和稳定性。Qt Widgets的开发工具包括Qt Designer和Qt Creator,可以极大地提高开发效率。

随着移动设备和嵌入式设备的普及,用户对UI界面的要求越来越高,需要更加现代化、漂亮、具有交互性的界面。因此,Qt公司于2009年推出了QML语言和Qt Quick框架,它们是面向现代化UI设计的新型工具和框架。

尽管QML和Qt Quick的出现,Qt Widgets仍然是一个非常重要的组件库,特别是在开发桌面应用程序方面。Qt Widgets在Qt 5中得到了进一步的改进和优化,增加了新的UI组件和工具,提高了性能和稳定性

在这里就可以看出为什么有了Qt Widgets还要继续引入QML和Qt Quick,引入QML和Qt Quick是为了更好地满足现代化UI界面(要炫酷和复杂的UI)的需求,提高开发效率和代码可维护性。

Qt Widgets的优点

以下是Qt Widgets的一些优点:

  • 良好的性能和稳定性:Qt Widgets使用C++语言编写,与底层操作系统API的交互更加紧密,因此具有很高的性能和稳定性。在处理大量数据和复杂计算时,通常比QML更快,特别适合开发大型、复杂的桌面应用程序。

  • 丰富的UI组件和工具:Qt Widgets提供了大量的UI组件和工具,如窗口、按钮、标签、文本框、列表框、滚动条等等,可以满足各种应用程序的需求。同时,开发者可以通过继承和重载Qt Widgets的类来实现自己的UI组件和样式,从而实现更加个性化的UI设计。

  • 易于学习和使用:Qt Widgets的文档和示例非常丰富,开发者可以很快掌握它的开发技巧和最佳实践。此外,Qt Widgets的开发工具包括Qt Designer和Qt Creator,可以极大地提高开发效率。

  • 跨平台支持:Qt Widgets可以在多个操作系统平台上运行,如Windows、MacOS、Linux等等,开发者可以使用相同的代码和工具在不同平台上开发应用程序,减少了开发和维护的成本。

  • 灵活的扩展性:Qt Widgets的UI组件和样式是由C++代码实现的,因此可以更加灵活地自定义和扩展。开发者可以根据自己的需求继承和重载Qt Widgets的类,实现自己的UI组件和样式,从而满足更加特定的需求。

总之,Qt Widgets是一个非常成熟、稳定、功能丰富、易于学习和使用的UI组件库,适用于开发桌面应用程序。它具有良好的性能和跨平台支持,同时也具有灵活的扩展性和个性化设计的能力,是开发桌面应用程序的一种优秀选择。

Qt Widgets的应用场景

Qt Widgets适用于开发各种类型的桌面应用程序,包括但不限于以下领域:

  • 商业软件:Qt Widgets提供了丰富的UI组件和工具,可以用于开发各种商业软件,如办公软件、会计软件、ERP软件等等。

  • 图像处理:Qt Widgets提供了丰富的绘图和图像处理工具,可以用于开发图像处理软件、绘图软件、CAD软件等等。

  • 游戏开发:Qt Widgets提供了丰富的UI组件和工具,可以用于开发各种类型的游戏,如棋类游戏、卡牌游戏、角色扮演游戏等等。

  • 科学计算:Qt Widgets提供了丰富的数学库和绘图工具,可以用于开发各种类型的科学计算软件,如数值分析软件、仿真软件、数据可视化软件等等。

  • 教育和培训:Qt Widgets提供了丰富的UI组件和工具,可以用于开发各种类型的教育和培训软件,如电子课本、在线学习平台、培训管理系统等等。

总之,Qt Widgets适用于开发各种类型的桌面应用程序,特别是对于需要高性能和稳定性的应用程序,如商业软件、科学计算软件、游戏开发等等,是一种非常优秀的选择。


QML与Qt Quick

QML(Qt Meta-Object Language)是一种用于创建用户界面的声明性语言。它使用JSON格式的语法来描述用户界面,可以快速地创建出具有良好交互性和动画效果的应用程序。QML通过JavaScript语言提供了丰富的交互功能,可以访问C++的后端逻辑,实现前后端数据交互。QML一般用于移动应用桌面应用嵌入式设备等领域。它的优势在于良好的可读性和易扩展性,以及适应各种屏幕尺寸的特点。

QML的发展

1、QML最初是由Qt公司开发的,是Qt Quick的基础旨在提供一种用于创建用户界面的现代化语言,能够满足不断变化的用户需求。QML最早是在Qt 4中推出的,但当时还没有Qt Quick框架,QML只是一种用于描述用户界面的语言。Qt 4的QML版本只支持一些简单的UI元素,而且性能较差,不够流畅。
2、随着移动应用的快速发展,Qt公司开始重视QML的发展,并在Qt 4.7中推出了Qt Quick框架,它不仅提供了强大的QML界面开发工具和库,还可以与C++代码无缝集成,提供了更好的性能和更广泛的应用场景。Qt Quick框架后来逐渐成为Qt的主要界面开发框架之一,也为QML的发展提供了更好的支持。
3、随着Qt 5的发布,QML也得到了进一步的改进和增强,包括更高的性能、更多的UI组件、更好的支持移动设备和嵌入式设备等。Qt公司还推出了Qt Creator集成开发环境,可以方便地进行QML应用程序开发和调试,同时也有很多社区和第三方开发者贡献了大量的开源QML组件和库,使得QML的生态系统更加丰富和完善。
总之,QML从最初的UI描述语言到现在的强大框架,经历了不断的发展和完善,成为现代化应用程序开发的重要技术之一,为开发者提供了更好的界面设计和开发体验。

QML的优点

QML有以下优点:

  • 语法简单:QML使用JSON格式的语法,易于学习和理解,开发人员可以快速上手。

  • 声明式语言:QML是一种声明式语言,开发人员只需要描述用户界面的外观和行为,而不需要关心具体的实现细节。

  • 良好的可读性:QML具有良好的可读性,可以直观地表达UI元素之间的关系和交互方式,提高了代码的可维护性。

  • 高效的UI开发:QML提供了丰富的UI组件和动画效果,可以快速创建出现代化、用户友好的应用程序,提高了UI开发的效率。

  • 跨平台:QML可以在多个平台上运行,包括Windows、Linux、macOS等,同时也可以在移动设备和嵌入式设备上运行。

  • 与C++的无缝集成:QML与C++可以无缝集成,可以通过JavaScript语言访问C++的后端逻辑,从而实现前后端数据交互。

总之,QML具有易学易用、高效率、可维护性强、跨平台等优点,为UI开发提供了一种新的选择。

QML的应用场景

QML是一种用于创建用户界面的声明性语言,是Qt Quick的基础。它使用JSON格式的语法来描述用户界面,可以快速地创建出具有良好交互性和动画效果的应用程序。QML通过JavaScript语言提供了丰富的交互功能,可以访问C++的后端逻辑,实现前后端数据交互。

QML可以用于许多应用场景,包括移动应用、桌面应用和嵌入式设备等。以下是一些QML的应用场景:

  • 移动应用:QML可以用于创建具有良好交互性和动画效果的移动应用,如手游、社交应用等。

  • 桌面应用:QML可以用于创建桌面应用程序,如音乐播放器、视频播放器、图像编辑器等,可以快速地创建出现代化、具有良好体验的应用程序。

  • 嵌入式设备:QML可以用于嵌入式设备的开发,如智能家居、智能车载等。

  • Web应用:QML可以通过Qt WebAssembly模块,将QML代码编译成WebAssembly字节码,在浏览器中运行,可以用于Web应用开发。

总之,QML是一个非常灵活的语言,可以应用于许多不同的领域和场景,为开发人员提供了更加高效、简单的UI开发方式。

从上面的回答我们就可以解答问题2了,Qt Quick其实是QML的框架,我们使用Qt Quick其实是为了更好更方便地使用QML(本质上还是使用QML),只不过相对于直接使用QML来说,Qt Quick提供了更多的工具和库,使得开发更加的高效和便捷。


总结

通读全文,我们可以看出,Qt Widgets有很多的优点,比如稳定、性能好等等优点,所以对于大规模的应用程序来说还是使用Qt Widgets来得靠谱,但是对于UI界面来说,想要单独使用Qt Widgets设计好美观和炫酷的UI界面是非常困难的,所以这才要引入QML,而Qt Quick是QML的一个框架可以更好地使用QML,但是QML的性能和稳定性是没有Qt Widgets好的,所以Qt Widgets与(QML、Qt Quick)也算是互补,将它们进行结合可以让我们的程序更完美
在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2) Building for: linux-aarch64-gnu-g++ (arm64, CPU features: neon) Target compiler: gcc 6.3.1 Configuration: cross_compile use_gold_linker compile_examples enable_new_dtags largefile neon precompile_header shared rpath release c++11 c++14 concurrent dbus reduce_exports stl Build options: Mode ................................... release Optimize release build for size ........ no Building shared libraries .............. yes Using C standard ....................... C11 Using C++ standard ..................... C++14 Using ccache ........................... no Using gold linker ...................... yes Using new DTAGS ........................ yes Using precompiled headers .............. yes Using LTCG ............................. no Target compiler supports: NEON ................................. yes Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... yes Qt D-Bus ............................... yes Qt D-Bus directly linked to libdbus .... no Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. yes Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... yes udev ................................... no Using system zlib ...................... yes Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ no GLib ................................... no iconv .................................. yes ICU .................................... no Tracing backend ........................ Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE2 ..................... no Qt Network: getifaddrs() ........................... yes IPv6 ifname ............................ yes libproxy ............................... no Linux AF_NETLINK ....................... yes OpenSSL ................................ yes Qt directly linked to OpenSSL ........ no OpenSSL 1.1 ............................ no DTLS ................................... yes SCTP ................................... no Use system proxies ..................... yes Qt Gui: Accessibility .......................... yes FreeType ............................... yes Using system FreeType ................ no HarfBuzz ............................... yes Using system HarfBuzz ................ no Fontconfig ............................. no Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... yes PNG .................................. yes Using system libpng ................ no EGL .................................... no OpenVG ................................. no OpenGL: Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ no OpenGL ES 3.0 ........................ no OpenGL ES 3.1 ........................ no OpenGL ES 3.2 ........................ no Vulkan ................................. no Session Management ..................... yes Features used by QPA backends: evdev .................................. yes libinput ............................... no INTEGRITY HID .......................... no mtdev .................................. no tslib .................................. no xkbcommon .............................. no X11 specific: XLib ................................. no EGL on X11 ........................... no QPA backends: DirectFB ............................... no EGLFS .................................. no LinuxFB ................................ yes VNC .................................... yes Mir client ............................. no Qt Sql: SQL item models ........................ yes Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... no Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... no PostgreSQL ............................. no SQLite2 ................................ no SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... no Qt Testlib: Tester for item models ................. yes Qt SerialBus: Socket CAN ............................. yes Socket CAN FD .......................... yes Qt QML: QML network support .................... yes QML debugging and profiling support .... yes QML sequence object .................... yes QML list model ......................... yes QML XML http request ................... yes QML Locale ............................. yes QML delegate model ..................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Qt Quick Designer .......... yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes TableView item ......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes Repeater item .......................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Scxml: ECMAScript data model for QtScxml ...... yes Qt Gamepad: SDL2 ................................... no Qt 3D: Assimp ................................. yes System Assimp .......................... no Output Qt3D Job traces ................. no Output Qt3D GL traces .................. no Use SSE2 instructions .................. no Use AVX2 instructions .................. no Aspects: Render aspect ........................ yes Input aspect ......................... yes Logic aspect ......................... yes Animation aspect ..................... yes Extras aspect ........................ yes Qt 3D Renderers: OpenGL Renderer ........................ yes Qt 3D GeometryLoaders: Autodesk FBX ........................... no Qt Wayland Client ........................ no Qt Wayland Compositor .................... no Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no WinRT Bluetooth API (desktop & UWP) .... no Qt Sensors: sensorfw ............................... no Qt Quick Controls 2: Styles ................................. Default Fusion Imagine Material Universal Qt Quick Templates 2: Hover support .......................... yes Multi-touch support .................... yes Qt Positioning: Gypsy GPS Daemon ....................... no WinRT Geolocation API .................. no Qt Location: Qt.labs.location experimental QML plugin . yes Geoservice plugins: OpenStreetMap ........................ yes HERE ................................. yes Esri ................................. yes Mapbox ............................... yes MapboxGL ............................. no Itemsoverlay ......................... yes QtXmlPatterns: XML schema support ..................... yes Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux ........................ yes OpenAL ................................. no PulseAudio ............................. no Resource Policy (libresourceqt5) ....... no Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Qt Tools: QDoc ................................... no Qt WebEngine: Embedded build ......................... yes Pepper Plugins ......................... no Printing and PDF ....................... no Proprietary Codecs ..................... no Spellchecker ........................... yes Native Spellchecker .................... no WebRTC ................................. no Use System Ninja ....................... no Geolocation ............................ yes WebChannel support ..................... yes Use v8 snapshot ........................ yes Kerberos Authentication ................ no Building v8 snapshot supported ......... yes Use ALSA ............................... no Use PulseAudio ......................... no Optional system libraries used: re2 .................................. no icu .................................. no libwebp, libwebpmux and libwebpdemux . no opus ................................. no ffmpeg ............................... no libvpx ............................... no snappy ............................... no glib ................................. no zlib ................................. yes minizip .............................. no libevent ............................. no jsoncpp .............................. no protobuf ............................. no libxml2 and libxslt .................. no lcms2 ................................ no png .................................. no JPEG ................................. no harfbuzz ............................. no freetype ............................. no x11 .................................. no Required system libraries: fontconfig ........................... no dbus ................................. no nss .................................. no khr .................................. no glibc ................................ yes Required system libraries for qpa-xcb: libdrm ............................... no xcomposite ........................... no xcursor .............................. no xi ................................... no xrandr ............................... no xtst ................................. no Note: Also available for Linux: linux-clang linux-icc
Qt QuickQt Widgets是Qt框架中用于创建用户界面的两种不同的技术。Qt Widgets是传统的基于C++的用户界面框架,而Qt Quick是基于QML的现代化UI框架。 Qt Widgets主要通过使用C++代码来创建和管理用户界面元素,它提供了丰富的预定义的UI组件和功能,可以通过编写C++代码来实现复杂的界面逻辑和交互。Qt Widgets适合开发传统的桌面应用程序和较为复杂的界面。 而Qt Quick使用QMLQt Meta-Object Language)语言来描述用户界面。QML是一种声明性语言,使用类似于JavaScript的语法,可以通过编写简洁的代码来创建精美的界面。Qt Quick还提供了一套丰富的可重用的UI组件,可以用于快速构建现代化的界面。Qt Quick适合开发移动应用程序和涉及动画和视觉效果的界面。 引入Qt QuickQt Widgets的原因是为了满足现代化UI界面的需求。Qt Quick可以提供更炫酷和复杂的界面效果,同时也能提高开发效率和代码可维护性。而Qt Widgets仍然有其优势和适用场景,因此Qt Widgets和Qt Quick可以根据实际需求灵活地结合使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [简单介绍Qt QuickQML以及Qt Widgets之间区别联系](https://blog.csdn.net/Jacksqh/article/details/130703212)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值