问题

如何评价Qt Lite Project?

回答
Qt Lite Project 的评价可以从多个维度进行深入分析,它代表了 Qt 在嵌入式和资源受限环境下的一个重要战略方向。

核心理念与目标:

Qt Lite Project 的核心理念是 “轻量级”。它的主要目标是:

减小 Qt 库的占用空间(Footprint): 这是最直接也是最重要的目标。通过精细的模块化和优化,大幅削减不必要的代码和依赖,使得 Qt 能够轻松地部署在内存、存储和处理器资源都极其有限的嵌入式设备上,例如微控制器(MCU)、小型物联网设备等。
提高启动速度和运行时性能: 更小的代码库通常意味着更快的加载速度和更高的执行效率,这对于实时性要求高的嵌入式系统至关重要。
降低内存消耗: 减少内存占用是嵌入式设备的一大挑战,Qt Lite 致力于在运行时也保持低内存足迹。
满足特定应用需求: 嵌入式项目往往只需要 Qt 的一部分功能,Qt Lite 允许开发者按需选择模块,避免引入不需要的代码,从而进一步优化资源使用。

如何实现“轻量级”?

Qt Lite Project 并非一个独立的、与主线 Qt 分离的项目,而是通过 主线 Qt 的持续优化和新的构建配置机制 来实现的。其主要实现方式包括:

1. 模块化和按需构建 (Modularization & OnDemand Building):
细粒度的模块划分: Qt 的各个功能被划分成非常细小的模块。开发者可以通过 Qt 构建系统 (configure) 的参数,精确地选择只需要的模块和功能。
Disabling Features: 许多模块内部也提供了一些可以禁用的功能选项。例如,可以禁用某些特定平台的支持、不常用的编码格式、复杂的动画效果等。
自定义构建配置: Qt 提供了强大的 `configure` 脚本,允许开发者通过命令行参数来控制构建过程,例如指定编译器、目标平台、启用的模块、禁用的特性等。

2. 移除或禁用不必要的特性 (Removal/Disabling of Unnecessary Features):
不适用于嵌入式场景的特性: 一些 Qt 的高级特性,如 XML、SQL 模块(在某些嵌入式场景下可能不需要)、HTML 渲染(除非是特定的 WebUI)、复杂的动画框架等,可以被选择性地禁用。
平台特定代码的移除: 在构建针对特定嵌入式平台的 Qt 时,可以移除那些只适用于其他操作系统(如 Windows、macOS)的代码。
国际化和本地化 (i18n/l10n) 的精简: 可以根据需要选择性地包含翻译文件,甚至完全移除国际化支持,进一步减小体积。

3. 静态链接 (Static Linking):
减小运行时依赖: 默认情况下,Qt 通常是动态链接的。但对于资源极其受限的嵌入式设备,将 Qt 静态链接到应用程序中可以避免对外部共享库的依赖,进一步减小部署的复杂性和可执行文件的大小(尽管静态链接可能整体上增加可执行文件大小,但可以避免多版本的共享库占用空间)。

4. 优化的二进制表示 (Optimized Binary Representation):
二进制代码优化: Qt 的编译器和构建系统会进行代码优化,例如函数内联、死代码消除等,以生成更紧凑的机器码。
移除调试信息: 在最终发布版本中移除调试信息是标准做法,可以显著减小文件大小。

5. Qt for MCUs (Microcontrollers):
专门为微控制器设计: Qt for MCUs 是 Qt Company 针对资源非常有限的微控制器推出的一个专门版本。它是在主线 Qt 的基础上,进一步剥离了对大型操作系统(如 Linux、Windows)的依赖,并针对 MCU 的硬件特性进行了深度优化。
内存管理优化: Qt for MCUs 的内存管理更加精简,例如不使用堆内存分配(或者使用非常有限的堆),而是采用静态内存分配或内存池。
图形渲染优化: 使用专门为 MCU 设计的图形后端,例如直接与硬件图形加速器(如 DMA2D)交互,或者使用更轻量级的渲染管线。
无需操作系统 (OSless): Qt for MCUs 可以直接运行在裸机上,无需依赖任何操作系统。

优点:

极大地扩展了 Qt 的适用范围: 使得 Qt 能够进入以前难以触及的嵌入式领域,为开发者提供了强大的跨平台 UI 开发能力,即使在资源受限的设备上也能实现美观、交互式的用户界面。
灵活性和可配置性强: 开发者可以根据项目需求高度定制 Qt 的构建,只包含必要的组件,避免不必要的开销。
降低开发成本: 对于嵌入式开发者而言,使用 Qt Lite 可以大大缩短 UI 开发周期,提高开发效率,降低对底层图形库的依赖。
保持与主线 Qt 的兼容性: Qt Lite 的核心仍然是 Qt 的主线,这意味着开发者可以享受到 Qt 生态系统带来的各种优势,例如丰富的工具链、活跃的社区支持等。
为物联网 (IoT) 设备提供有力支持: 随着物联网设备的普及,对轻量级且功能强大的 UI 框架的需求日益增长,Qt Lite 正好满足了这一需求。

缺点与挑战:

学习曲线: 精确地配置和构建 Qt Lite 需要对 Qt 的模块化机制和构建系统有深入的理解,这可能会增加一定的学习成本。
调试和排错的复杂性: 当禁用了某些模块或特性后,调试过程中可能会遇到一些意想不到的问题,定位原因可能需要更多的精力。
可能需要更底层的知识: 在某些极端情况下,为了进一步优化,可能需要开发者对目标平台的硬件和底层库有更深入的了解,以便进行更细致的配置。
Qt for MCUs 的限制: 虽然 Qt for MCUs 非常强大,但它毕竟是针对 MCU 设计的,相比于桌面版 Qt,在功能和复杂性上会有所限制,例如某些高级的布局管理器、动画效果可能不可用。
性能调优的持续性: 随着 Qt 新版本的发布和新特性的加入,如何持续地保持 Qt Lite 的轻量级和高性能,需要 Qt Company 和社区的不断努力。

总结:

Qt Lite Project 是 Qt 发展历程中的一个 重要里程碑,它深刻地体现了 Qt 作为一款跨平台开发框架的 强大适应性和进化能力。它不是一个割裂的“Lite”版本,而是通过 主线 Qt 的精细化和模块化能力 来实现的。

对于 资源相对充裕但又追求效率的嵌入式系统(如某些中高端嵌入式 Linux 设备),通过精细的 `configure` 参数来构建一个裁剪后的 Qt 是一个非常有效的策略。
对于 资源极其有限的微控制器,Qt for MCUs 则提供了更专门化、更底层的解决方案。

总而言之,Qt Lite 项目 极大地丰富了 Qt 的应用场景,使得 Qt 能够触达更广泛的嵌入式设备,为嵌入式 UI 开发带来了革命性的便利性。对于任何希望在资源受限的设备上构建美观、交互式用户界面的开发者来说,了解并利用 Qt Lite 的能力都是非常有价值的。它的存在证明了 Qt 在保持功能强大的同时,也能做到“轻巧灵便”。

网友意见

user avatar

Qt到了5.8版本,终于迎来了一个重要功能,就是QtLite。

此功能可谓是千呼万唤始出来,饱受诟病的体积问题,终于可以在一定程度上得到解决。


在这个回答里,先是介绍QtLite,然后如何使用以及使用效果,最后是我的评价。


那么QtLite到底是什么呢,按照官方原话,是

Configurability (Qt Lite Project) Qt 5.8 comes with a rewritten configuration system that allows for easy customization of Qt builds. The main focus of this feature is for the Device Creation, but it can also be used to tailor a Qt build for mobile or desktop platforms. The new configuration system allows removing individual pieces of functionality and APIs from Qt, creating a more lightweight set of libraries for deployment.

也就是说,QtLite实质上是一个配置系统。

话说我最初以为这是一个单独的工具,可以直接缩减应用的体积。然而并不是。


我这里主要说下后半段,也就是 removing individual pieces of functionality and APIs from Qt ,这句话的意思就是我们可以直接去除Qt模块中的功能和API了,这是缩减体积最重要的部分。


什么叫去除功能和API呢。我举个例子

Qt里有一个类,叫QClipboard,就是剪切板相关的功能。但是很多人出于某些原因,不用这个,或者用了系统的API。那么这样的话,这个QClipboard就没有任何存在的意义了,我们就可以直接去掉它,以缩减库体积,最终缩减应用的体积。


那么如何做到这一点呢。首先我们要重新编译Qt的源码,然后在配置的时候,添加特定的参数,来进行配置,去除掉这个功能。

参数很简单,就是 -no-feature-clipboard

配置好后,重新编译Qt,就可以了。


目前Qt有一个feature列表,里面记录了Qt有哪些feature,有100多个。我的理解就是这里的feature都是可以去掉的,这个列表存放的位置在源码的 qtbasesrccorelibglobalqfeatures.txt


内容如下:



不过呢,在我的实际使用中,我发现这个列表里的并非都可以去掉,我只能说一大半是可以去掉的。要我说怎么区分哪些可以,哪些不可以。首先是看Requires,模块间是相互依赖的,被Requires的模块去掉的话,Requires它的模块就会没法正常编译。在Requires都得到保证的情况下,也不是说所有模块都可以去掉,有时候编译会报错,那么只能把去掉的feature加回去。


比如说,遇到了这个

这里说QSettings不是一个类型。的确,我去掉了settings这个feature。看起来是其他的模块,使用了QSettings。

(貌似是gui那里用了core里的这个feature?那我如果不用gui是不是可以仍然去掉这个feature呢?具体还没尝试)

但是settings这个feature在列表里,没有Requires其他feature,其他feature也没有Requires它,有图为证。


不过,有什么办法呢,无力修改Qt源码,只能再把settings加回去。


我试了N种配置,编译了整整1天,真的好心累,终于调出来一个可以编译过,然后去掉尽可能多的模块配置。如下:

configure.bat -static -release -platform win32-g++ -no-opengl -prefix "C:QtQt5.8.0_MinGW_static" -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdeclarative -skip qtdoc -skip qtgamepad -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquickcontrols -skip qtquickcontrols2 -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsvg -skip qttools -skip qttranslations -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns -no-feature-texthtmlparser -no-feature-textodfwriter -no-feature-concurrent -no-feature-effects -no-feature-sharedmemory -no-feature-systemsemaphore -no-feature-im -no-feature-process -no-feature-dom -no-feature-filesystemmodel -no-feature-filesystemwatcher -no-feature-graphicsview -no-feature-graphicseffect -no-feature-sizegrip -no-feature-calendarwidget -no-feature-printpreviewwidget -no-feature-keysequenceedit -no-feature-colordialog -no-feature-filedialog -no-feature-fontdialog -no-feature-printpreviewdialog -no-feature-progressdialog -no-feature-inputdialog -no-feature-errormessage -no-feature-wizard -no-feature-datawidgetmapper -no-feature-imageformat_bmp -no-feature-imageformat_ppm -no-feature-imageformat_xbm -no-feature-imageformat_png -no-feature-imageformat_jpeg -no-feature-image_heuristic_mask -no-feature-image_text -no-feature-colornames -no-feature-cups -no-feature-paint_debug -no-feature-freetype -no-feature-translation -no-feature-codecs -no-feature-big_codecs -no-feature-iconv -no-feature-ftp -no-feature-udpsocket -no-feature-networkproxy -no-feature-socks5 -no-feature-networkdiskcache -no-feature-bearermanagement -no-feature-completer -no-feature-fscompleter -no-feature-desktopservices -no-feature-mimetype -no-feature-systemtrayicon -no-feature-undocommand -no-feature-undostack -no-feature-undogroup -no-feature-undoview -no-feature-statemachine -no-feature-gestures -no-feature-dbus

感觉去掉的东西还不是很多,主要是去掉后各种报错,以后新版本再跟进下。


至于效果,我们主要看core、gui和widgets。

我使用的版本是Windows下,MinGW,5.8.0,开源版

在原版中,静态编译后,分别是


在使用QtLite,静态编译后,分别是



可见体积的确缩小了。

接下来试下QtWidgets工程,我使用QtCreator创建一个默认的工程,然后放进去一个HelloQtLite字样的QLabel。

编译出来的exe:

原版 + 静态编译:


QtLite + 静态编译:


16MB缩减到11MB,体积还是很可观的缩小了

再rar压缩一下:



看来QtLite配合静态编译还有rar压缩,简单的QtWidgets程序可以缩减到4MB以内,很给力。

最后,都丢到一个纯净的Win7,正常运行


对了,因为有人提到过Qt模块划分的问题,我也去看了下,在我使用的源码里,Qt一共有38个大分组,比如说qtbase,qt3d等等。QtLite目前主要优化了qtbase这一个分组,也是最常用的一个。不使用QtLite的情况下,全部编译完成后,一共会得到60个库。这一次我编译后,通过skip(跳过编译),还有QtLite,一共可以去掉42个库,剩下18个。


最后,要我评价QtLite的话,我认为是: 这是一个很好的功能,因为在这个功能上我们可以以很低的使用成本裁剪Qt,甚至不需要直接接触到代码。允许开发者们定制自己想要的模块,抛弃不必要的功能。 这在嵌入式上会有较大的意义,QtLite应该也是主要给嵌入式开发的特性。 在桌面上我觉得意义有限,但是的确很多人会去纠结这个体积问题。 另外,作为第一个拥有QtLite的Qt版本,也就是5.8,固然存在一些问题,希望Qt能在将来的版本中解决。或者允许去除更多模块,进一步缩减体积。 PS:其实官方有一个小工具的,叫Qt Configuration Tool。就是QtLite可视化配置工具。 doc.qt.io/QtEnterpriseE 不过我没找到如何下载的地方,看URL链接,我猜测是只有嵌入式设备授权的的Qt企业版,才有这个工具。残念ing。。。

PS2:知乎你能不能别这么坑,图片怎么动不动就挂掉,我已经重新恢复2次了

类似的话题

  • 回答
    Qt Lite Project 的评价可以从多个维度进行深入分析,它代表了 Qt 在嵌入式和资源受限环境下的一个重要战略方向。核心理念与目标:Qt Lite Project 的核心理念是 “轻量级”。它的主要目标是: 减小 Qt 库的占用空间(Footprint): 这是最直接也是最重要的目标。.............
  • 回答
    《睡前消息》409期作为一档以“睡前”为名的时事评论节目,其内容通常以轻松幽默的风格呈现社会热点、科技动态、文化现象等话题,旨在为观众提供睡前的“信息快餐”。以下是对该期节目可能涉及的分析框架和评价方向,结合其节目特点及社会语境进行详细解读: 1. 节目核心内容与选题分析 选题热点:409期可能聚焦.............
  • 回答
    俄罗斯军队在2022年2月24日入侵乌克兰后,21天内未能占领或包围基辅,这一结果涉及复杂的军事、战略和国际因素。以下从多个维度详细分析这一现象: 1. 初期快速推进的军事目标与战略调整 初期目标的矛盾性: 俄罗斯在入侵初期(2月24日)宣称“特别军事行动”的目标是“去纳粹化”和“去俄化”,但.............
  • 回答
    新华社的《破除美国金融模式迷信,中国金融要走自己的路》一文,是近年来中国在金融领域强调自主性、独立性和战略定力的重要政策表达。该文从历史经验、现实挑战和未来战略三个维度,系统阐述了中国金融发展的路径选择,具有鲜明的现实针对性和理论深度。以下从多个角度对这篇文章进行详细分析: 一、文章背景与核心论点1.............
  • 回答
    2022年俄乌战争爆发后,中国互联网上确实出现了一些复杂的现象,既有官方立场的引导,也有民间舆论的分化。以下从多个角度分析这一时期中国互联网的乱象及其背后的原因: 一、官方立场与网络管控1. 官方舆论引导 中国政府明确表态支持乌克兰的主权和领土完整,同时强调“不干涉内政”的原则。在社交媒体和.............
  • 回答
    陈道明、王志文、陈宝国、张国立、李雪健是中国影视界最具代表性的“老戏骨”之一,他们以深厚的表演功底、多样的角色塑造和持久的行业影响力,成为中国影视艺术的中流砥柱。以下从表演风格、代表作、行业地位及艺术贡献等方面进行详细分析: 一、陈道明:历史剧的“帝王”与艺术的“多面手”表演特点: 陈道明以“沉稳.............
  • 回答
    《为战争叫好的都是傻逼》这类文章通常以强烈的反战立场和道德批判为核心,其评价需要从多个维度进行分析,包括其立场的合理性、论据的逻辑性、社会影响以及可能存在的争议。以下从不同角度展开详细分析: 1. 文章的核心立场与立场合理性 立场:这类文章的核心观点是战争本质上是道德上不可接受的,支持战争的人(尤其.............
  • 回答
    龙云(1882年-1967年)是20世纪中国西南地区的重要军阀和政治人物,被尊称为“云南王”,其统治时期(1920年代至1940年代)对云南的现代化进程和民族关系产生了深远影响。以下从多个维度对其历史地位和影响进行详细分析: 一、生平与政治背景1. 出身与早期经历 龙云出生于云南昆明,出身于.............
  • 回答
    关于“前三十年的工业化是一堆破铜烂铁”的说法,这一评价需要结合历史背景、经济政策、技术条件以及国际环境等多方面因素进行深入分析。以下从多个角度展开讨论: 一、历史背景与“前三十年”的定义“前三十年”通常指中国从1949年新中国成立到1979年改革开放前的30年。这一时期,中国在经济、政治、社会等方面.............
  • 回答
    十元左右的低档快餐店顾客以男性为主的现象,可以从经济、社会文化、消费行为、地理位置等多方面进行分析。以下从多个角度详细探讨这一现象的原因及可能的背景: 1. 经济因素:价格敏感与消费习惯 性价比优先:十元左右的快餐通常以快速、便宜、标准化为特点,符合低收入群体或日常通勤人群的消费需求。男性在职场中可.............
  • 回答
    阎学通教授对00后大学生以“居高临下”心态看待世界这一批评,可以从多个维度进行深入分析,其背后既有学术视角的考量,也涉及代际差异、教育体系、社会环境等复杂因素。以下从观点解析、合理性分析、现实背景、潜在影响及改进方向等方面展开详细探讨: 一、阎学通教授的核心观点与逻辑1. “居高临下”的具体表现 .............
  • 回答
    歼8系列战机是中国在20世纪70年代至80年代期间研制的高空高速歼击机,是当时中国航空工业的重要成果之一。该系列战机在冷战时期具有显著的军事意义,但随着技术发展和国际形势变化,其性能和作用逐渐被后续机型取代。以下从历史背景、技术特点、性能分析、发展演变、军事影响及评价等方面进行详细解析: 一、历史背.............
  • 回答
    关于苏翻译和Black枪骑兵对俄乌战争局势的立场差异,需要明确的是,这两位身份可能涉及不同的信息来源和立场背景。以下从多个角度分析他们观点差异的可能原因: 1. 信息来源与立场定位 苏翻译(可能指苏晓康,中国《经济学人》翻译团队成员): 立场:更倾向于国际法、人道主义和多边主义视角。 观点:.............
  • 回答
    由于无法直接访问《睡前消息》第409期的具体内容(可能因平台更新、用户输入误差或节目名称不明确导致无法准确检索),以下将基于对“睡前消息”类节目的常见结构和主题进行推测性分析,并提供一般性的评价框架。若您有更具体的背景信息(如节目来源、发布时间等),可补充说明以便更精准回答。 一、节目内容推测(基于.............
  • 回答
    明成祖朱棣(14021424年在位)五次北伐漠北(今蒙古高原)是明王朝巩固北方边疆、遏制蒙古势力的关键历史事件。这一系列军事行动不仅体现了朱棣的军事才能,也深刻影响了明朝的边疆政策、内政格局和历史走向。以下从历史背景、军事行动、结果评价及历史影响等方面详细分析: 一、历史背景1. 政治合法性与边疆安.............
  • 回答
    2022年的俄乌战争是21世纪最具全球影响力的冲突之一,其规模、持续时间、国际影响和人道主义灾难远超以往。以下从多个维度对这场战争进行详细分析: 一、战争爆发的背景与起因1. 历史渊源 俄乌冲突的根源可追溯至2014年克里米亚危机和顿巴斯战争,俄罗斯在2014年吞并克里米亚并支持顿巴斯分离.............
  • 回答
    关于美国国务卿布林肯和波兰总统对北约向乌克兰提供战机的表态,这一问题涉及地缘政治、军事战略、国内政治和国际关系等多重因素。以下从多个角度进行详细分析: 一、背景与核心争议1. 乌克兰的军事需求 乌克兰自2022年俄乌冲突爆发以来,面临俄罗斯的军事压力,急需先进武器装备以增强防御能力。战机(尤.............
  • 回答
    亚投行(亚洲基础设施投资银行,AIIB)在2022年俄乌冲突爆发后,确实对在俄罗斯和白俄罗斯的项目进行了暂停和审查,这一举措引发了国际社会的广泛关注。以下从背景、原因、影响及评价多个角度进行详细分析: 一、事件背景1. 俄乌冲突的国际影响 2022年2月,俄罗斯入侵乌克兰,引发西方国家对俄罗.............
  • 回答
    俄乌冲突中的俄军指挥体系和行动表现是一个复杂的问题,涉及军事战略、指挥结构、后勤保障、情报系统等多个方面。以下从多个角度对俄军指挥进行详细分析: 一、指挥体系结构1. 中央指挥链 俄军的指挥体系以中央军区(俄联邦安全局)和西部军区(负责乌克兰东部战区)为核心,由总参谋部协调。 总参.............
  • 回答
    关于“幻影部队突袭利沃夫”这一假说,目前尚无确凿证据支持其真实性。以下从历史背景、军事分析、情报来源及可能的动机等方面进行详细分析: 一、历史与地理背景1. 利沃夫的战略地位 利沃夫是乌克兰东部的重要城市,位于第聂伯河畔,历史上曾是俄罗斯帝国、奥匈帝国和苏联的军事重镇。在俄乌战争中,利沃夫是.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有