当前位置: 首页 > news >正文

Qt可执行文件打包全流程

1. 简介

Qt生成可执行文件后,为了在一些没有安装Qt环境的电脑运行,通常需要将Qt运行时所需要的文件和生成目录下的可执行文件一起打包在一起。在Windows上Qt提供了一个很快捷使用的工具windeployqt.exe

2. 打包流程

  1. 编译可执行文件,在Qt的开发IDE中选择release模式编译运行,确保没问题后打开生成的目录,其中包含可执行文件.exe和一些自行添加的运行所需文件.dll

注意如果使用了一些安装在自己电脑环境变量中的.dll文件,例如使用了OpenCV或者其他开发包,也需要将其对应的.dll文件复制到这个目录

  1. 在文件管理器中新建一个文件夹,将整个目录中的文件复制到其中(将所有内容复制才能保证打包时Qt能够完整扫描到所需资源,不用担心文件过大,后续有瘦身方法)

  2. powershell中打开这个文件目录,运行指令windeployqt.exe .\xxxx.exe,打包时会出现一些提示信息

  3. 打包完成后,理论上可以直接将这个文件夹直接压缩在其他电脑上打开运行,如果要在自己电脑测试,可以先编辑系统环境变量Path,将Qt相关的路径先删除,后运行看是否有问题。但是此时内部文件有冗余,例如我打包后为146M

  4. 剔除不需要的文件,剔除方法很简单,在这个文件目录下点击可执行文件运行,然后全选文件夹,删除所有内容,此时会出现File In Use的提示,这些文件才是必须的,全部选择跳过。删除后文件夹大小来到71.6M,此时再将其打包为压缩包只有32M,这个压缩包就是所谓的绿色软件,解压缩就可以运行

3. 将绿色软件打包为安装包

为了得到一个类似于安装包的可执行文件,可以使用工具将这个文件夹打包压缩,推荐使用工具Inno Setup Downloads,软件网上有很多教程,不在此详细重复。

  1. 首先新建一个Inno的文件,推荐使用他的引导流程新建

  2. 其中一个关键步骤是添加可执行文件和执行文件所需的目录文件夹

  3. 其余均可默认,最后选择输出文件夹和文件图标

  4. 最后生成一个.iss文件,可以保存下来,打开后点击顶部编译图标就可以生成可以用来安装的文件了

  5. 最后生成一个安装包,其文件体积只有20M

  6. 双击安装包运行,打开一个安装界面,一路Next安装到默认目录。好处是后续文件更新后可以直接安装,其会自动替换原有的文件,达到类似软件升级的效果

4. 其他与注意事项

  1. 如果Qml采用了外部Qml,也就是不打包在可执行文件中的方式,可使用以下方式,property var test_qml: ThemeManager.is_pack ? "file:./Test.qml" : "Test.qml" file开头的是采用相对路径的方式,此时的在CMakeLists使用qt_add_qml_module生成的目录很重要,使用上述剔除冗余文件的方法可能会全部删除掉,主要是索引目录,可以把生成的文件和文件目录删掉,保留以下内容。

  2. 打包之前可以在CMakeLists中qt_add_executable配置WIN32选项,去除输出信息终端。

qt_add_executable(${program_name} WIN32  main.cpp ${SOURCES} Asset/logo.rc  
)

但是此时所有的输出将均不可见,就算打包后出现的bug也无法查看,文件中使用以下方法,将qDebug重定向到Windows中

void CustomMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) {  QByteArray localMsg = msg.toLocal8Bit();  QString formattedMsg =  QString("[%1]:%2").arg(QDateTime::currentDateTime().toString("hh:mm:ss.zzz")).arg(localMsg.constData());  
#ifdef QT_PACK  OutputDebugStringW((LPCWSTR)formattedMsg.utf16());  
#else  fprintf(stderr, "%s\n", formattedMsg.toStdString().c_str());  
#endif  
}int main() {
...
/* 自定义日志输出 */qInstallMessageHandler(CustomMessageOutput);
...
}

此时,利用微软提供的软件DebugView - Sysinternals | Microsoft Learn,先运行DebugView再运行自己的软件,就可以看到软件的输出了。

68bc6096f6e4.png"
class="wikilink" alt="Pastedimage20251004111826.png" />

http://www.dtcms.com/a/442959.html

相关文章:

  • 大庆免费网站建设公司网站开发平台是什么
  • 做网站用什么空间网络班级网站建设
  • UE5 小知识点 —— 10 - 鼠标操作
  • 西安英文网站建设安丘网站建设报价
  • llama.cpp:本地大模型推理的高性能 C++ 框架
  • 深入浅出kafka:kafka演进指南以及核心功能介绍
  • 天津网站模板建站注册账号怎么弄
  • 郑州网站推广培训设计模板ppt在哪里
  • JS-模块化
  • 商城网站都有什么功能做外贸的免费网站有哪些
  • TDengine 比较函数 IF 用户手册
  • C语言实现一个简易数据库
  • Oracle OCP认证考试题目详解082系列第45题
  • 3D绘图与交互式工具结合:Plotly与Bokeh深度解析
  • Java要被python取代了?3个技术维度拆分分析
  • 【软考-分析】
  • 站群软件想在网上卖货需要怎么做
  • 水果成篮_优选算法(C++)滑动窗口
  • dw网站建设字体颜色做超市dm的网站
  • 网站seo查询工具wordpress小工具页脚
  • PostIn入门到实战(7) - 如何快速调试websocket接口
  • 网站建设需求公司内部调查福田深圳网站建设
  • 如果自己建立网站做甲方去哪个网站应聘
  • 重要数据、长期存储 | 为什么要用机械硬盘?
  • 做木业网站怎样起名电商平台推广员是做什么的
  • 浙江省住房建设厅网站首页公司做网站的费属于广告费么
  • 卖汽车的网站怎么做网站一年费用多少钱
  • 不需要证件做网站找别人做网站注意事项
  • 建设岗位考试网站写网页用什么软件
  • 某个网站访问慢的原因兄弟们拿走不谢