找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

841

积分

0

好友

117

主题
发表于 16 小时前 | 查看: 0| 回复: 0

2020年,Qt公司(The Qt Company)宣布了一项重大政策调整:自Qt 5.15 LTS(长期支持)版本起,官方将不再为开源用户提供预编译的离线安装包。这项变革直接将开源用户的安装路径导向了以下两种方式:

  • 仅提供源代码
  • 强制使用在线安装器进行安装

而商业用户则不受此限制,依然可以下载离线安装包。这一变化在开发者社区内引发了广泛讨论,许多开发者认为,这不仅是出于降低多平台编译维护成本的考虑,也标志着Qt在商业化道路上迈出了更明显的一步。

本文将详细解析这次安装策略变革的背景,并为你提供从源码编译在线安装器使用技巧,再到企业级离线部署的完整解决方案,帮助你在新常态下顺利完成Qt开发环境的搭建。

一、Qt安装策略的历史演变

1.1 Qt4 ~ Qt5.14:离线安装包时代

在Qt 5.14及之前的版本,无论开源还是商业用户,都能轻松地从Qt官网下载完整的离线安装包(例如 qt-opensource-windows-x86-5.14.2.exe)。这种安装包通常包含了:

  • 多个Qt版本(如5.9, 5.12, 5.14等)
  • 多种编译套件(MSVC, MinGW, Android, iOS等)
  • Qt Creator IDE
  • 完整的文档与示例

优点非常明显:

  • 一次下载,永久可用。
  • 无需网络即可随时安装或重装。
  • 非常适合内网或网络受限的开发环境。

1.2 Qt 5.15+:在线安装器主导时代

但从Qt 5.15开始,情况发生了变化。开源用户访问Qt官网下载页面时,只能下载一个体积约为30MB的轻量级“在线安装器”。这个安装器启动后必须登录Qt账户,并且需要保持网络连接才能从服务器动态下载你选择的组件。

🔒 关键限制:

  • 开源账户无法下载Qt 5.15及之后版本的离线安装包。
  • 在线安装器要求你的Qt账户绑定GitHub或GitLab账号,用以验证你的开源开发者身份。

二、变革背后的动因分析

2.1 官方解释:降低维护成本

Qt官方给出的理由是现实的:Qt需要支持数十种平台和编译器的组合(Windows/Linux/macOS + MSVC/MinGW/GCC/Clang + x86/x64/ARM + Android/iOS等)。为每个LTS版本维护所有组合的预编译包,其测试、构建和分发的成本确实极高。

2.2 深层原因:用户行为数据与商业化

然而,正如开发者社区中的普遍推测,这一转变背后还有更深层的商业考量。通过在线安装器,Qt公司能够:

  • 追踪用户数量与分布(地域、平台、版本偏好),获取更精确的市场数据。
  • 推动账户体系绑定,增强用户与官方平台的粘性。
  • 为商业服务和模块导流,例如在安装过程中推荐Qt for Automation、Qt Safe Renderer等商业产品。

事实也印证了这一点:自Qt 5.15起,商业模块的推广力度明显加大,同时开源版本的功能更新周期似乎也在缩短。

三、对开发者的影响

场景 影响
个人开发者 需要注册账户,且安装过程必须依赖网络。
企业内网开发 无法直接使用在线安装器,需要寻找代理或离线解决方案。
CI/CD自动化构建 无法直接下载预编译包,需要自行编译或在构建环境中缓存。
教学/培训环境 批量、快速部署变得困难。

四、解决方案一:使用在线安装器(推荐日常开发)

4.1 下载与安装步骤

  1. 访问 https://www.qt.io/download
  2. 下载 Qt Online Installer
  3. 安装时选择 “Open Source” 许可证
  4. 使用GitHub/GitLab账户登录(系统会检查你是否拥有公开仓库来证明开发者身份)
  5. 在组件选择界面勾选所需版本(例如 Qt 5.15.2 → MinGW 8.1.0 64-bit

⚠️ 注意:Qt 5.15.2是最后一个官方支持Windows 7的版本。

4.2 创建离线安装副本(重要!)

虽然无法直接下载离线安装包,但你可以将在线安装后的整个Qt目录打包,用作其他机器的离线部署源

# 假设在线安装到 C:\Qt
# 打包整个Qt目录(包含Qt Creator、工具链、文档等)
tar -czf qt5152-offline-backup.tar.gz /path/to/Qt

将打包后的文件复制到目标机器并解压后,通常需要修复内部路径,具体方法见下文“离线部署”章节。

五、解决方案二:从源码编译Qt(适用于内网/定制需求)

如果你需要在内网环境使用,或者希望对Qt进行深度定制(如静态编译、裁剪模块),那么从源码编译是最佳选择。

5.1 获取源码

# 方法1:通过在线安装器下载源码包(推荐,最方便)
# 只需在在线安装器的组件选择界面勾选 “Sources” -> “Qt 5.15.2”

# 方法2:从官方Git仓库克隆(需要配置子模块)
git clone https://code.qt.io/qt/qt5.git
cd qt5
git checkout 5.15.2
perl init-repository

5.2 编译环境准备(以Windows + MinGW为例)

你需要提前安装好必要的工具:

  • PerlPython:Qt的配置脚本需要它们。
  • MinGW-w64:选择与目标版本匹配的工具链。

5.3 配置与编译

进入源码目录,执行配置和编译命令。对于源码编译这种需求,一份清晰的编译指南至关重要。

# 进入源码目录
cd qt5

# 进行配置(这是一个精简版配置,仅编译必要模块)
configure -prefix C:\Qt\5.15.2\mingw81_64_custom \
-release \
-opensource \
-confirm-license \
-static \           # 可选:进行静态编译
-nomake examples \
-nomake tests \
-opengl desktop \
-platform win32-g++ \
-skip qtwebengine        # 跳过编译非常耗时的WebEngine模块

# 开始编译(使用-j参数启用多线程以加速)
mingw32-make -j8

# 将编译好的文件安装到之前-prefix指定的目录
mingw32-make install

⏱️ 编译耗时提示: 在一台普通性能的PC上,完整的编译过程大约需要2到6小时,具体时间取决于你选择的模块数量和机器性能。

5.4 验证编译结果

编写一个简单的测试程序,并使用刚刚编译出来的qmake进行构建。

// test.cpp
#include <QApplication>
#include <QLabel>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QLabel label("Hello from compiled Qt 5.15!");
    label.show();
    return app.exec();
}
# 使用自编译的qmake生成Makefile并构建
C:\Qt\5.15.2\mingw81_64_custom\bin\qmake test.pro
mingw32-make
./test.exe

如果程序能成功运行并显示窗口,恭喜你,源码编译成功!

六、解决方案三:离线部署已安装的Qt(企业级方案)

如果你已经通过在线安装器在一台“母机”上安装好了Qt,可以将其完整地迁移到任何无网络环境的机器上。

6.1 打包步骤

  1. 复制整个Qt安装目录(例如 C:\Qt)。
  2. 复制Qt所依赖的工具链目录(例如MinGW)。
  3. (可选)打包Qt Creator的配置文件,以便统一开发环境。

6.2 修复路径(关键!)

Qt的很多二进制文件内部硬编码了原始的安装路径。搬迁后,最简单的修正方法是使用 qt.conf 文件。

; 在目标机器的 Qt\5.15.2\mingw81_64\bin\ 目录下创建或修改 qt.conf
[Paths]
Prefix=..

这个配置告诉Qt,所有相对路径都基于qt.conf文件所在目录的上一级开始计算。对于更复杂的搬迁,可以使用社区提供的 patchqt.py 等脚本进行批量路径替换。

6.3 部署脚本示例(Windows批处理)

你可以编写一个简单的脚本来快速设置目标机器的环境变量。

@echo off
set QT_DIR=D:\Qt
set PATH=%QT_DIR%\Tools\mingw810_64\bin;%QT_DIR%\5.15.2\mingw81_64\bin;%PATH%
echo Qt environment ready.
cmd /k

七、CI/CD中的自动化安装(GitHub Actions示例)

在持续集成/持续部署环境中,你可以利用现有的社区Action来自动化安装Qt。

# .github/workflows/build.yml
name: Build with Qt 5.15

on: [push]

jobs:
  build:
    runs-on: windows-latest
    steps:
    - name: Install Qt
      uses: jurplel/install-qt-action@v3
      with:
        version: '5.15.2'
        target: 'desktop'
        arch: 'win64_mingw81'
        modules: 'qtcharts qtmultimedia'

    - name: Build project
      run: |
          qmake myproject.pro
          mingw32-make

✅ 这个 install-qt-action 会自动从Qt的在线源下载并安装指定组件,非常适合云端构建环境。

八、未来展望:Qt6与商业化趋势

  • Qt6已全面采用在线安装模式,这一政策在Qt6时代已成为既定事实。
  • 开源版本的功能逐渐落后于商业版,例如Qt Quick Compiler等性能优化工具仅限商业许可证使用。
  • LTS支持周期对开源用户缩短,Qt 5.15 LTS对开源用户的支持已于2023年结束。

📌 给开发者的建议:

  • 对于长期、关键的企业级项目,应认真评估商业许可证的价值。
  • 对于希望保持稳定的系统,可以考虑锁定在Qt 5.15.2这个最后一个对开源用户相对“友好”的LTS版本。
  • 积极参与开源实战与Qt开源社区,反馈需求,共同影响其开源部分的发展方向。

九、总结

为了方便你快速决策,这里将三种主要方案的优缺点对比如下:

方案 适用场景 优点 缺点
在线安装器 个人开发、有稳定网络的日常环境 简单快捷,官方直接支持 需要账户,强依赖网络
源码编译 内网环境、有深度定制或优化需求 完全可控,可裁剪优化 耗时很长,技术门槛较高
离线部署 企业批量部署、无网络环境 一次配置,多机复用 需手动修复路径,维护稍麻烦

核心结论:
Qt 5.15+ 的安装策略变革是当下开源软件商业化趋势的一个典型缩影。作为开发者,我们需要适应这种“在线优先”的新常态。同时,掌握源码编译离线部署这两项技能,不再是可选项,而是保障项目开发自主权和应对复杂环境的关键能力。

正如一句开发者箴言所说:“你可以不经常自己编译Qt,但你必须知道如何编译Qt。”

最后提醒: 在使用Qt进行开发时,请务必遵守其开源许可证(LGPL/GPL)的要求,合理使用,共同维护健康的开源生态。




上一篇:IC电路符号设计指南:引脚视图与功能视图的选型与应用
下一篇:JWT算法混淆漏洞复现:从普通用户到管理员权限提升
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-28 18:10 , Processed in 0.258055 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表