Qt程序打包如何补全版本与公司信息:从qmake到Inno Setup全配置

发布时间:2026/10/16 10:18:30

Qt程序打包如何补全版本与公司信息:从qmake到Inno Setup全配置 1. 为什么Qt程序默认打包出来是个三无安装包先说个我自己的经历。之前给某公司做的一个模拟项目X收尾Qt 5.15写的Windows桌面工具编译、调试、跑自动化测试都通过了最后用Inno Setup打了个安装包发给测试组。结果对方打开安装程序第一句话就问这软件叫什么谁开发的装完以后开始菜单里是什么名字我当场愣了一下因为安装过程界面里确实只有默认的Welcome to the Setup Wizard没有软件名、没有版本号、没有公司信息安装完以后桌面快捷方式也叫得莫名其妙。右键点开安装后的exe文件属性详细信息标签页里版本、产品名称、版权信息全是空白。这个问题的根源其实不在Inno Setup而是很多人把打包理解成了把文件塞进安装包。实际上安装包的简介分两个层面一个是安装程序本身的元数据一个是被安装的程序文件的元数据两者要分开看exe文件属性里那些文件描述、产品版本、公司名、版权是Qt工程编译时写进PE资源段的信息跟你用什么打包工具没关系安装程序左上角、欢迎页、卸载程序列表里显示的软件名、版本号、出版商是Inno Setup脚本里声明的配置项。如果你只是用默认模板拖了个iss脚本就编译这两层信息全是空的。这篇文章就把从Qt工程文件到Inno Setup脚本的全链路怎么补上简介讲清楚看完你也能给安装包写上完整的身份证。2. Qt编译产物自带的简介信息要从工程文件里写起2.1 版本和公司信息在Qt工程里怎么声明如果你的Qt程序编译出来exe文件右键属性里啥都没有问题出在.pro工程文件。Qt用qmake构建时默认生成的Windows资源文件.rc里是空的需要你手动告诉qmake把哪些信息塞进去。在.pro文件里加上下面这几行VERSION 2.1.0.0 QMAKE_TARGET_COMPANY 某公司 QMAKE_TARGET_PRODUCT 某跨平台系统 QMAKE_TARGET_DESCRIPTION 用于数据采集与分析的客户端工具 QMAKE_TARGET_COPYRIGHT Copyright 2024 某公司. All rights reserved.其中VERSION是四项版本号格式是主版本.次版本.修订号.构建号。Windows的版本号要求严格四段写2.1的话系统会自动在后面补零但建议直接写完整。QMAKE_TARGET_COMPANY对应属性页里的公司。QMAKE_TARGET_PRODUCT对应产品名称。QMAKE_TARGET_DESCRIPTION对应文件描述也就是你在资源管理器里把鼠标悬停在exe上时看到的提示文字。QMAKE_TARGET_COPYRIGHT对应版权。加完以后要重新qmake注意不是直接重新编译就行。Qt Creator里右键项目选运行 qmake或者命令行执行一次qmake然后重新构建。我第一次就踩了这个坑改了pro文件直接点构建编译倒是成功了但exe属性还是空的——因为Makefile里没更新资源文件根本没重新生成。2.2 没生效怎么办手动指定RC文件某些工程结构比较特殊或者你用了CMake上面那套qmake变量可能不生效。这时候需要走更底层的路子自己写一个.rc文件和.rc里的版本信息然后在pro里引用它。先写一个version.rc#include windows.h VS_VERSION_INFO VERSIONINFO FILEVERSION 2,1,0,0 PRODUCTVERSION 2,1,0,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L FILETYPE 0x1L FILESUBTYPE 0x0L BEGIN BLOCK StringFileInfo BEGIN BLOCK 040904B0 BEGIN VALUE CompanyName, 某公司 VALUE FileDescription, 用于数据采集与分析的客户端工具 VALUE FileVersion, 2.1.0.0 VALUE InternalName, app.exe VALUE OriginalFilename, app.exe VALUE ProductName, 某跨平台系统 VALUE ProductVersion, 2.1.0.0 VALUE LegalCopyright, Copyright 2024 某公司. All rights reserved. END END BLOCK VarFileInfo BEGIN VALUE Translation, 0x409, 1200 END END然后在.pro里RC_FILE version.rc040904B0是英语(美国)Unicode编码的语言标识。如果你想让中文系统显示名正言顺也可以写080404B0简体中文Unicode我试下来其实Windows资源管理器都会正常显示不用太纠结但要注意编码必须保存为UTF-8。这里有个容易忽略的点RC文件里的字符串编码不一致时资源编译不会报错但显示的可能是乱码。建议用VS Code或NotePad新建文件、粘贴内容、选择UTF-8编码保存别用系统记事本的默认ANSI。2.3 编译后怎么快速验证做完上面任一步重新编译一次然后在资源管理器里右键exe文件属性切到详细信息标签页就能看到填进去的公司、产品名、文件描述和版权了。如果你装了Windows SDK也可以打开Developer Command Prompt用命令验证sigcheck.exe -a app.exe或者用powershell(Get-Item .\app.exe).VersionInfo | Format-List *这一步务必在写Inno Setup脚本之前做。因为安装包的简介和exe本身的简介是两回事但用户装在电脑上以后最常看的是exe文件属性而不是安装包属性。所以哪层都不能缺。3. Inno Setup安装脚本里给安装包本身添加简介3.1 [Setup]段里的元数据配置项接下来用Inno Setup做一个能看到的安装程序。打开Inno Setup Compiler新建脚本或打开已有的默认脚本把[Setup]段里的几个关键配置项补齐[Setup] ; 安装包显示的程序名和安装后出现在卸载程序列表里的名字 AppName某跨平台系统 AppVersion2.1.0.0 AppVerName某跨平台系统 2.1.0.0 ; 发布方信息 AppPublisher某公司 AppPublisherURLhttps://example.com AppSupportURLhttps://example.com/support AppUpdatesURLhttps://example.com/update ; 默认安装目录 DefaultDirName{autopf}\某跨平台系统 DefaultGroupName某跨平台系统 ; 生成安装包exe时的文件属性 VersionInfoCompany某公司 VersionInfoDescription某跨平台系统 安装程序 VersionInfoTextVersion2.1.0.0 VersionInfoVersion2.1.0.0 VersionInfoProductName某跨平台系统 VersionInfoProductVersion2.1.0.0 VersionInfoProductTextVersion2.1.0.0 VersionInfoCopyrightCopyright 2024 某公司. All rights reserved.逐项说一下AppName是安装过程中和卸载或更改程序列表里显示的短名称。不建议写太长如果产品有具体版本号想带上去用AppVerName。AppVerName默认是AppName AppVersion你可以单独覆盖效果是在欢迎页Welcome to X 2.1.0.0 Setup这种地方显示全称。AppPublisher会出现在卸载列表的发布者列。VersionInfo*这组配置项控制的是**安装程序本身setup.exe**在资源管理器里详细信息里显示的内容右键安装包看属性就能看到。还有一个容易被忽略的AppId。如果你以前发布过旧版本卸载列表里已经有一条旧记录这靠AppId识别。想给旧用户平滑升级而不是各装各的务必给一个固定GUID网上搜一个或者用Tools选项里的Generate GUID都行。没写的情况下Inno Setup每次都会生成新的旧版本卸载列表就会多出另一条。3.2 安装目录、开始菜单与图标里的软件标识上面那堆是文字层面的简介但用户感知到的这个软件叫什么、图标长什么样还涉及另外三处[Setup] ; 桌面快捷方式 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked [Icons] Name: {group}\某跨平台系统; Filename: {app}\app.exe Name: {autodesktop}\某跨平台系统; Filename: {app}\app.exe; Tasks: desktopicon [Files] Source: D:\build\release\app.exe; DestDir: {app}; Flags: ignoreversion Source: D:\build\release\*.dll; DestDir: {app}; Flags: ignoreversion recursesubdirs Source: D:\build\release\platforms\*; DestDir: {app}\platforms; Flags: ignoreversion recursesubdirs Source: D:\build\release\README.txt; DestDir: {app}; Flags: isreadme[Files]里那些Source就是实际要打进去的程序文件Qt程序经常要带platforms、sqldrivers、imageformats等子目录写的时候注意用recursesubdirs。[Icons]里的Filename指向启动程序Name是快捷方式显示名这个影响开始菜单搜索和桌面图标的文字。Flags: isreadme表示这个文件会被当成使用说明卸载列表的详情里能看到技术支持信息里的位置Inno Setup本身不帮你显示它的内容但用户可以在控制面板的卸载入口右键查看。图标这件事我多说一句很多人只改了[Setup]的AppName忘了[Icons]里的Filename指向的exe图标结果开始菜单和桌面图标还是Qt默认的齿轮图标。Qt生成的exe图标一般是在.pro里通过RC_ICONS app.ico指定的你放一张好看的ico文件进去重新编译打包出来自然就是自定义图标。ico建议准备16x16、24x24、32x32、48x48、256x256多尺寸Windows在资源管理器不同视图下才会清晰。3.3 安装包自带支持信息在哪里体现关于AppPublisherURL、AppSupportURL、AppUpdatesURL这三个链接它们是给Windows程序和功能界面用的。用户打开控制面板或者设置的安装的应用找到你的软件右键更改左下角会出现技术支持信息链接打开后就能看到网址。如果你不想提供网址可以留空或删掉对应行但AppPublisher建议保留。有些场景比如公司内部分发工具甚至不需要HTTP链接可以写成mailto:前缀或者\\内网共享路径Windows会尝试用默认程序打开实用性很高。4. 让安装过程中能看到软件简介欢迎页、信息页与中文编码4.1 用[Files]里的README实现安装时显示说明文件Inno Setup有一个非常顺手的功能[Files]段标记Flags: isreadme的文件会在安装完成后自动用文本查看器打开或者在查看安装说明的地方出现。你可以在Qt工程里放一个README.txt写清楚软件用途一两句话版本号和更新日期运行环境要求Windows 10/1164位需要VC运行库等常见问题和联系方式。这样用户安装完第一时间就能看到这软件是干嘛的。不过isreadme只对纯文本或RTF有效而且默认用系统关联程序打开体验一般。想做得更精致可以用[Messages]改提示语或者自定义对话框。下面讲更实用的做法。4.2 [Messages]段替换默认欢迎语Inno Setup默认欢迎页写的是一段泛泛的Welcome to the X Setup Wizard这东西谁看都像模板。你可以用[Messages]段把欢迎页的标题和正文替换成你想要的简介[Messages] WelcomeLabel1欢迎安装 某跨平台系统 2.1.0.0 WelcomeLabel2本软件用于数据采集与分析的桌面客户端工具。通过本向导即可完成安装。%n%n建议在安装前关闭其他正在运行的应用程序。 SetupWindowTitle某跨平台系统 2.1.0.0 安装程序 AppName某跨平台系统注意%n是换行Inno Setup的[Messages]里换行不能直接用回车键敲进去要看编译是否通过其实写字面%n就好。另外还有一个很有用的提示语[Messages] SelectDirLabel3本软件将安装到以下目录。要更改目录请单击下一步。%n%nSelectDirLabel3是选安装路径页面的副标题默认显示的是通用的那一段英文。通过替换这一条你在选择安装目录的步骤里也能给用户展示一句软件用途说明。4.3 自定义关于本软件对话框如果你希望在安装过程中某个步骤弹出一个真正的软件简介Inno Setup没有内置简介页但可以用InitializeWizard事件函数加一个自定义页面。完整示例[Code] var InfoPage: TWizardPage; InfoMemo: TNewStaticText; procedure InitializeWizard; var PageInfo: TNewStaticText; begin InfoPage : CreateCustomPage(wpWelcome, 关于本软件, 某跨平台系统 2.1.0.0 简介); PageInfo : TNewStaticText.Create(InfoPage); PageInfo.Parent : InfoPage.Surface; PageInfo.Caption : 某跨平台系统 是一款用于数据采集与分析的桌面客户端工具。 #13#10 支持 Windows 10/11 64 位系统内置多种通信协议接口与报表导出功能。 #13#10 #13#10 版本2.1.0.0 #13#10 版权Copyright 2024 某公司. All rights reserved.; PageInfo.AutoSize : True; PageInfo.Left : 0; PageInfo.Top : 0; end;这个页面会出现在欢迎页之后密码/信息步骤之前。CreateCustomPage的第一参数是wpWelcome表示你要在这个内置页后面插入。TNewStaticText不会自动换行如果简介文本太长建议改用TNewMemo并设置为只读var InfoMemo: TNewMemo; ... InfoMemo : TNewMemo.Create(InfoPage); InfoMemo.Parent : InfoPage.Surface; InfoMemo.SetBounds(0, 0, InfoPage.SurfaceWidth, InfoPage.SurfaceHeight); InfoMemo.ReadOnly : True; InfoMemo.TabStop : False; InfoMemo.ScrollBars : ssVertical; InfoMemo.Text : 这里写更长的简介;用TNewMemo的好处是内容很多时能滚动且字体默认和安装程序其他文字保持一致。4.4 中文乱码是头号敌人Inno Setup官方版本从5时代就支持Unicode编译但很多人拿到的旧模板或网上存的脚本是UTF-8无BOM编码保存一旦里面写了中文Inno Setup编译器默认按系统ANSI代码页去读结果就是乱码或编译报错。解决办法很固定用Inno Setup Compiler打开脚本后File菜单里确认是否以UTF-8编码读取或者直接用支持BOM的编辑器另存为UTF-8 with BOM。我最省事的方法是用VS Code装好编辑器右下角把编码切到UTF-8 with BOM再保存。没有BOM的UTF-8在Inno Setup里偶尔会被误判。如果是用命令行编译ISCC.exe也建议保持脚本编码统一。Inno Setup 6.x对UTF-8的无BOM处理比5.x好一些但为了彻底省心一律用带BOM的UTF-8最稳。还有一处中文乱码高发区[Code]里的字符串如果包含中文建议不要在代码块里硬编码而是放到[Messages]里再用ExpandConstant({cm:MyInfo})去引用。中文字符在Pascal脚本里通常没问题只要你文件编码对。5. 打包自校验清单踩过的坑和验证方法5.1 谁能看到简介不同位置的简介来源我做过的项目里最常见的问题是用户搞混了安装包属性和程序文件属性以为改一处就行。实际上要验证的地方至少有四个查看位置信息来源配置位置安装包setup.exe右键详细信息Inno Setup [Setup]段VersionInfo*打包脚本安装后app.exe右键详细信息Qt工程资源文件pro或rcQt工程控制面板卸载或更改程序列表[Setup]段AppName/AppPublisher/AppVersion打包脚本安装过程欢迎页、目录选择页[Messages]段或自定义Code页面打包脚本这里要特别提醒不要指望改了Inno Setup的VersionInfo就能让被安装的exe属性也变。Inno Setup不修改你的主程序文件它只是把文件原封不动复制到安装目录。所以很多人打包完以后发现exe属性还是空的回头检查Qt工程才是正解。5.2 版本号对不上三个地方必须一致我建议在发布前把三处版本号统一下.pro里的VERSION 2.1.0.0[Setup]里的AppVersion2.1.0.0和VersionInfoVersion2.1.0.0代码里如果调用了QApplication::applicationVersion()或类似接口记得保持一致。版本号不一致最影响的是升级场景。Inno Setup判断是否覆盖旧版本依据是AppId和AppVersion的大小比较如果AppVersion混乱很可能出现明明装了新版但控制面板里显示的还是旧版本号这种尴尬。5.3 卸载程序显示名称的控制卸载程序列表里自动生成的名字并非一定等于AppName。Inno Setup默认给你生成某跨平台系统作为卸载显示名但如果你在[Code]里写了AppName相关逻辑或者用了unins事件可能会出现诡异的名字。更关键的是Inno Setup的卸载程序本身也带一个默认图标和描述它取的也是[Setup]段的AppName。如果你的安装包改了名字但没重新生成AppId卸载列表里会出现两条不同名字的记录这时请检查注册表卸载项HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\{你的AppId}_is1里面的DisplayName和DisplayVersion字段是什么值就是Windows控制面板显示的值。Inno Setup每次安装时会重写这段正常情况以脚本配置为准。5.4 Qt插件目录不能漏否则装上没法运行聊简介好像扯远了但这条真不能省。Qt程序打包漏掉platforms目录是最常见的能编译不能运行原因。因为Inno Setup只知道你显式写了[Files]段里的哪些文件不会自动递归你的Qt目录。我一般都是在Qt发布目录执行windeployqt.exe app.exe它会自动把依赖的插件、DLL、翻译文件复制到exe同目录。然后把整个目录打进去[Files] Source: D:\build\release\*; DestDir: {app}; Flags: ignoreversion recursesubdirs简单粗暴但可靠。如果你有额外的运行库比如MSVC运行库、OpenSSL需要单独带上Windeployqt不会帮你处理所有Runtime。5.5 安装后文件校验与简介是否真的写进去了脚本写好后编译安装包然后按下面顺序验证一遍右键安装包→详细信息→确认公司名、产品名、版本号、版权是否正常运行安装程序→确认欢迎页、自定义简介页、安装路径页的中文显示无乱码安装完成→在安装目录里右键app.exe→详细信息→确认公司名、产品名、文件描述、版本号正常开始菜单搜索软件名→确认快捷方式名称和图标打开设置→应用或控制面板→确认卸载列表里的发布者、名称、版本号。其中第2步最容易发现编码问题第3步最容易发现Qt侧没写版本信息的遗漏。跑一遍完整流程只需要几分钟但能省掉一堆用户找上门的这软件怎么没有名字的咨询。6. 一个完整的最小示例脚本最后贴一个能直接改改就用的完整.iss脚本注释写清楚关键点; Script generated by Inno Setup - 以6.x为例 ; 记得保存为 UTF-8 with BOM #define MyAppName 某跨平台系统 #define MyAppVersion 2.1.0.0 #define MyAppPublisher 某公司 #define MyAppExeName app.exe [Setup] AppId{{8E2F7D93-1A44-4F6B-9B12-2A6F4C8E0D31} AppName{#MyAppName} AppVersion{#MyAppVersion} AppVerName{#MyAppName} {#MyAppVersion} AppPublisher{#MyAppPublisher} AppPublisherURLhttps://example.com AppSupportURLhttps://example.com/support AppUpdatesURLhttps://example.com/update DefaultDirName{autopf}\{#MyAppName} DefaultGroupName{#MyAppName} DisableProgramGroupPageyes OutputBaseFilenamesetup-{#MyAppName}-{#MyAppVersion} Compressionlzma2 SolidCompressionyes WizardStylemodern VersionInfoCompany{#MyAppPublisher} VersionInfoDescription{#MyAppName} 安装程序 VersionInfoTextVersion{#MyAppVersion} VersionInfoVersion{#MyAppVersion} VersionInfoProductName{#MyAppName} VersionInfoProductVersion{#MyAppVersion} VersionInfoProductTextVersion{#MyAppVersion} VersionInfoCopyrightCopyright 2024 {#MyAppPublisher}. All rights reserved. [Messages] WelcomeLabel1欢迎安装 {#MyAppName} {#MyAppVersion} WelcomeLabel2本软件用于数据采集与分析。#13#10#13#10建议安装前关闭其他应用程序。 [Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked [Files] Source: D:\build\release\{#MyAppExeName}; DestDir: {app}; Flags: ignoreversion Source: D:\build\release\*; DestDir: {app}; Flags: ignoreversion recursesubdirs Source: D:\build\release\README.txt; DestDir: {app}; Flags: isreadme [Icons] Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName} Name: {autodesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon [Run] Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, , )}}; Flags: nowait postinstall skipifsilent [Code] var InfoPage: TWizardPage; InfoMemo: TNewMemo; procedure InitializeWizard; begin InfoPage : CreateCustomPage(wpWelcome, 关于本软件, {#MyAppName} {#MyAppVersion} 简介); InfoMemo : TNewMemo.Create(InfoPage); InfoMemo.Parent : InfoPage.Surface; InfoMemo.SetBounds(0, 0, InfoPage.SurfaceWidth, InfoPage.SurfaceHeight); InfoMemo.ReadOnly : True; InfoMemo.TabStop : False; InfoMemo.ScrollBars : ssVertical; InfoMemo.Text : {#MyAppName} 是一款用于数据采集与分析的桌面客户端工具。 #13#10 支持 Windows 10/11 64 位系统内置多种通信协议接口与报表导出功能。 #13#10 #13#10 版本{#MyAppVersion} #13#10 发布方{#MyAppPublisher} #13#10 版权Copyright 2024 {#MyAppPublisher}. All rights reserved.; end;几个点再强调Source: D:\build\release\*这个通配符会把整个release目录都打进去包括exe。所以我特意在上面又单独列了一个exe的Source其实不用重复只写通配符那行就够了。但如果你的目录里还有其他乱七八糟不想发布的内容就按需写精确路径。Compressionlzma2和SolidCompressionyes是压缩设置Qt程序一堆DLL用这个能压不少体积代价是安装时解压稍慢但现代机器上区别不大。WizardStylemodern是Inno Setup 6推荐的新式向导样式界面上看起来比旧式清爽简介文字显示也更现代。DisableProgramGroupPageyes让安装过程不让你选开始菜单文件夹直接用默认分组个人工具类软件强烈建议减少用户操作。需要用户自定义分组就删掉这行。7. 再说几句经验话Inno Setup配合Qt打包这件事我前前后后折腾过好几轮最深的体会是简介不是你最后想起来加一笔就完事的东西而是一条贯穿编译和打包的主线。我的建议流程是先改Qt工程把exe的元数据填满编译一次确认属性正确再写Inno Setup脚本把AppName、AppPublisher、VersionInfo全部填满最后加一个自定义简介页或者把README标记好把编码存成UTF-8 with BOM编译安装包完整走一遍安装验证。如果在某个环节发现信息没生效别急着改脚本先判断用户是在看哪个界面。右键看exe属性就回头看Qt工程看安装包属性就看[Setup]段安装界面乱码就检查编码和[Messages]段。思路理清了这些问题都不难。另外一个小技巧是下载安装包以后经常遇到杀毒软件误报的情况。这通常跟你用压缩壳或者没有数字签名有关跟你写的版本信息关系不大。真想解决需要申请代码签名证书这属于另一个话题了但至少你提前把版本和公司信息写对至少Windows的SmartScreen在评级的时候能显示一个可读的发布者名比未知发布者要好一点。最后提醒一句发布给外部用户的软件建议把安装包命名也带上版本号比如setup-某跨平台系统-2.1.0.0.exe。这样就算用户把安装包存到下载目录好几个月不装看到文件名也知道是哪个版本。这个习惯比你在脚本里加一百行简介都管用。
延伸阅读

更多相关文章

2026/10/16 10:18:30

YOLO免环境训练工具全流程指南:从自动标注到模型转换

简介:这份资源面向深度学习目标检测方向的开发者与算法学习者,提供一套免环境搭建的YOLO系列训练与标注工具,解决从数据标注到模型训练、转换流程繁琐的问题。包内共14个文件,以txt技术解析、html说明页、doc文档及jpg示意图为主&…

2026/10/16 10:13:29

Gitee不只能存代码:从SSH到Pull Request评审的团队协作进阶指南

如果你的日常工作流还停留在“把Gitee当成免费网盘,clone下来push上去就完事”,那你可能只用了这个代码托管平台一半以上的能力。我在过去几年带过好几个小团队,从最开始互相clone压缩包传文件,到后来把需求管理、代码评审、自动构…

2026/10/16 10:13:29

Seaborn数据可视化实战:用Titanic案例掌握统计图表绘制

1. Seaborn 到底是什么,为什么值得专门打卡一天2025 年的 AI 学习打卡进行到第 5 天,这个挑战计划里最让我期待的就是 Seaborn。说实话,在打卡之前我已经用过很长一段时间的 Matplotlib,画折线图、柱状图、散点图这些基础操作早就…

2026/10/16 11:30:12

HCIA智能计算101-164题号考点拆解:从硬件到场景的备考逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 11:30:12

免费CTF靶场练手指南:从选型到上手的完整路径

刚接触CTF的朋友基本都会经历同一个阶段:资料收藏了一大堆,视频课程刷了好几套,可真到打开一个比赛平台准备动手的时候,却发现自己连最基本的“从哪里下手”都想不清楚。这种情况太正常了,因为CTF本身就是一门强实践的…

2026/10/16 11:30:12

从 7B 到 3B:YuE 第二代轻量版砍了什么、留了什么

从 7B 到 3B:YuE 第二代轻量版砍了什么、留了什么 【免费下载链接】YuE2-3B 项目地址: https://ai.gitcode.com/hf_mirrors/m-a-p/YuE2-3B 如果把"模型变小"当作"能力缩水",YuE2-3B 会推翻这个直觉:参数从第一代…

2026/10/16 11:25:11

STM32驱动BGT24MTR11毫米波雷达全流程指南

简介:本资源是一套基于STM32平台驱动BGT24MTR11毫米波雷达芯片的完整嵌入式开发工程,面向嵌入式初学者、雷达信号处理学习者及工业测距应用开发者。项目聚焦I/Q信号采集、ADC配置、FFT频谱分析与目标距离解算全流程,覆盖硬件通信(…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/16 0:01:11

Cephadm实战指南:Linux系统工程师的生产级Ceph集群部署与排障

简介:本资源是一份完整的Ceph分布式存储系统中文技术文档合集,面向Linux系统运维工程师、云平台架构师及存储方向开发者,帮助读者系统掌握Ceph集群的部署、配置与运维核心能力。文档覆盖对象存储(RGW)、块设备&#xf…

2026/10/16 0:01:11

ITK中SpatialObject几何体系解析:坐标系、变换与管道集成

1. 空间对象的定位:为什么 ITK 需要一套几何描述体系很多刚开始接触 ITK 的朋友,包括我自己,最初都是被它的图像滤波、配准、分割这些“正统”功能吸引进来的。等真正上手做点实际项目,比如把分割出来的器官边界做量化分析、给血管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑