Qt之打包发布(NSIS详解)

QT项目打包成软件进行发布的三种方式 一些小伙伴可能很好奇我们使用QT制作的软件该怎么像网上其他人那样进行打包发布,我这里对打包发布的三种方式都进行了详细讲解,分别为绿色便携版、单文件版和安装版。除了绿色便携版,其他两种方式非QT开发的软件也同样适用。 阅读详情

http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.html

发布方式   

    Qt发布的时候,通常使用两种方式:
    (1)静态编译
    (2)动态编译
    静态编译:把相关联的库一并引入可执行程序,虽然发布简单,但可执行程序较大。。。
    动态编译:相关联的库,以dll的形式引用,不被包含进可执行程序,发布不方便,但可执行程序较小。。。
    静态发布虽然不需要较多的dll,发布简单、方便,但是往往会牵扯到授权问题(详情请查看Qt  LGPL授权),动态发布则可以避免。。。如果附带了Qt的dll,就相当于发布了Qt的dll,而这些库是属于Qt的,这足以保证使用者知道程序使用了LGPL版本的Qt(这部分还有待探讨)。

查找依赖项
1、检测可执行程序依赖模块
    下载工具:Dependency Walker
    打开可执行程序,检测依赖项
Qt之打包发布(NSIS详解)
    检测完成之后,将所需依赖库拷贝进去。。。再次进行检测,反复进行。

2、常用依赖库
(1)Qt模块库
    Qt5Cored.dll
    Qt5Guid.dll
    Qt5Widgetsd.dll
(2)ICU依赖库
    icudt51.dll
    icuin51.dll
    icuuc51.dll
(3)EGL依赖库
    libEGLd.dll
    libGLESv2d.dll
(4)插件库(Qt安装目录下即可找到D:\Software\Qt\Qt5.1.0\5.1.0\msvc2010\plugins\platforms)
    图片支持库:imageformats
    音频、视频支持库:mediaservice
    平台支持库:platforms
    等等。。。
    注意:查找对应的插件文件夹,粘贴到安装目录(一定要保持目录结构,例如“ platforms/***.dll”),详细结构见打包发布准备的文件组织结构。     
(5)VS运行时库(在VS安装目录下即可找到D:\Software\Microsoft Visual Studio\VC\redist)
    msvcp100d.dll
    msvcr100d.dll

    注意:发布程序的时候注意版本(Debug/Release)
    如果是Debug版本的则是.前面带d的(Qt5Cored.dll、Qt5Guid.dll、Qt5Widgetsd.dll)
    如果是Release版本的则是.前面不带d的(Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll)
     
    以上是我所用到的依赖库,基本可以解决问题,包括:
      Qt之打包发布(NSIS详解)

关于NSIS
1、NSIS简介
(1)NSIS是什么?
    一款免费的Win32安装、卸载系统!
(2)NSIS有什么特点?
    脚本简洁高效、系统开销小,进行安装、卸载、设置、解压文件也不在话下,几乎可以做所有的事情。

2、工具
    NSIS Edit + NSIS

3、使用方式
    脚本向导 + 修改代码 = 个性化安装包

准备文件
    以下是我即将打包的所有文件,安装包目录结构(包括:可执行程序、 插件库、运行时库、授权文件、卸载程序图标等等!)如下图所示:
Qt之打包发布(NSIS详解)
1、利用向导制作安装包:
Qt之打包发布(NSIS详解)

2、填写应用程序基本信息

Qt之打包发布(NSIS详解)

3、指定安装程序所用选项
    注意:这里选择语言为SimpChinese
Qt之打包发布(NSIS详解)

4、设置应用程序安装目录与授权文件

Qt之打包发布(NSIS详解)

5、指定应用程序文件

Qt之打包发布(NSIS详解)

6、指定创建应用程序图标

Qt之打包发布(NSIS详解)

7、选择安装程序完成后运行的动作

Qt之打包发布(NSIS详解)

8、指定接触安装程序属性

Qt之打包发布(NSIS详解)

9、进行脚本编译、保存

Qt之打包发布(NSIS详解)

10、等待编译完成,即可运行打包后的安装包
Qt之打包发布(NSIS详解)

    大功告成之后,即可进行安装!

(1)安装程序

Qt之打包发布(NSIS详解)

(2)此处显示授权文件中的内容

Qt之打包发布(NSIS详解)

(3)选择安装目录

Qt之打包发布(NSIS详解)

(4)运行程序,并显示“自述文件”

Qt之打包发布(NSIS详解)

(5)运行结果

Qt之打包发布(NSIS详解)

    关于Qt的打包工具了解一些,个人感觉NSIS用起来比较顺手,脚本修改起来也方便,所以就推崇一下。。。若想将安装包变得更加美观,则需要手动修改脚本,更多信息请查找相关资料,此处不再多做介绍!

注:
    技术在于交流、沟通,转载请注明出处并保持作品的完整性。

Qt项目使用NSIS工具打包发布 1. 安装NSIS工具 在将要发布的文件夹中添加程序安装图标、卸载图标及License.txt文件.如下图 注意生成图标时候像素选择大点,如256*256。License.txt文件内容可自行定义。 安装NSIS 双击运行nsis_setup.exe文件。 ... 阅读详情

相关推荐

Zemax热分析实战:5分钟搞定双胶合透镜温度漂移优化(附操作数详解)

本文详细解析了使用Zemax进行光学系统热分析的全流程,以双胶合透镜为例,重点阐述了如何通过多重结构编辑器模拟温度变化,并利用关键操作数优化系统以抵抗温度漂移。文章提供了从基础设置到高级优化的实战技巧,帮助工程师快速掌握无热化设计方法,确保系统在宽温范围内保持稳定成像性能。

n4o5p6q7r的博客 398

Qt 打包为可执行文件(详解)

当我们有一些成果想要分享给别人时,就需要将程序进行打包,跟着我一起开始操作吧!

创客小邓的博客 2万+

基于STM32的工业I/O模块硬件电路实现

深入解析基于STM32的工业I/O模块硬件电路实现,涵盖关键电路设计与信号处理,突出硬件电路稳定性和工业级可靠性,适合嵌入式开发者参考。

weixin_35835018的博客 456

QT项目超详细打包教程

QT项目打包超详细教程

qq_47023150的博客 9384

基于WEB的报价管理系统的设计与实现

该系统采用B/S模式,后台运用SpringMVC和MyBatis搭建,利用MySQL数据库,来组织存储和管理数据,使用tomcat服务器向外提供服务。使用该系统对外有利于提高企业的综合竞争力,对内有利于提高成本管理和控制的水平,简化了报价流程、提高了工作效率、精简了报价机构,降低了成本。研究和掌握必要的信息采集和数据查询技术,是各个企业,事业单位信息化的一个重要标志。当前大多数企业采取的报价方式仍然是用EXCEL表格和人工的方式,这不仅不利于大量数据的总结,更不利于对销售利润的控制。

m0_60918862的博客 1000

VFIO框架源码分析(二十二)- IOMMUFD 的脏页跟踪与 Dirty Bits 读取

在虚拟化热迁移(Live Migration)的场景中,脏页追踪(Dirty Page Tracking)是最具挑战性的环节之一。它的核心任务是实时捕获设备(DMA)对内存的写操作,以便 VMM(如 QEMU)知道哪些内存页需要被重新传输到目标主机。在强耦合与粗粒度:脏页追踪是绑定在 Container 上的。这意味着,如果一个 Container 内有多个设备,哪怕只有一个设备在写内存,脏页追踪也会影响 Container 内的所有设备。软件模拟开销大。

qq_36071928的博客 1045

QT 程序打包的方法

QT程序打包的方法

m0_60259116的博客 1万+

高匿反爬实战:Python打造无痕爬虫,规避风控系统追踪

网络层匿踪:核心是使用住宅IP代理池,按真实用户IP画像匹配,控制请求频率;协议层匿踪:动态生成请求头(每次都不同),参数添加随机噪声,避免规律化;行为层匿踪:模拟人类的非规律行为(贝塞尔轨迹、随机停顿、非精准点击);设备层匿踪:伪造Canvas/WebGL指纹,禁用webdriver标识,每次请求更换指纹;核心原则:无痕爬虫的本质是“无限接近真实用户”,所有维度都要消除爬虫特征,而非单一维度伪装。打造真正的无痕爬虫需要全维度的匿踪策略,单一维度的伪装极易被高级风控系统识别。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2642

Qt的程序打包

qt如何打包成PC端的程序和安卓端的程序

qq_52531759的博客 4214

Unity中使用TCP和UDP传输摄像头视频的实践

本文探讨了在Unity中通过TCP和UDP协议传输摄像头视频的实现方法。TCP通过自定义消息帧保证数据完整性但效率较低,UDP传输速度快但可能丢帧。文章提供了Python和Unity的代码示例,分析了两种协议的适用场景:TCP适合要求数据完整性的应用,UDP则适合追求实时性的场景。最终选择取决于具体需求,并需要注意线程安全与同步机制。

m0_74337424的博客 145

Qt之打包发布(NSIS详解)(转)

 Qt之打包发布(NSIS详解) (2013-09-02 17:41:11) 转载▼ 标签: qt 打包发布 qt打包发布 nsis 分类: Qt 发布方式        Qt发布的时候,通常使用两种方式:    (1)静态编译    (2)动态编译     静态编译:把相关联的库一并引入可执行程序,虽然发布简单,

ZeroSpace 717

把消息说清楚:OData V2 的 sap-message、错误体 errordetails 与 ABAP 端落地实践(Gateway Foundation / RAP)

OData V2消息机制解析:SAP业务系统的结构化通信设计 本文深入剖析了SAP系统中OData V2协议的消息传递机制。该设计通过双通道(成功时使用sap-message响应头,失败时采用error响应体)实现业务数据与提示信息的结构化分离,解决了企业级应用中"只返回业务数据"或"简单报错"的不足。文章详细解读了消息结构中的关键要素:target字段实现精准UI定位、severity级别控制交互流程、transition标记区分状态消息与过渡消息。同时揭示了SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 852

NSIS QUICK打包发布应用程序

NSIS QUICK 打包发布应用程序

weixin_41560737的博客 1250

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

QT打包发布NSIS

发布方式        Qt发布的时候,通常使用两种方式:    (1)静态编译    (2)动态编译     静态编译:把相关联的库一并引入可执行程序,虽然发布简单,但可执行程序较大。。。     动态编译:相关联的库,以dll的形式引用,不被包含进可执行程序,发布不方便,但可执行程序较小。。。     静态发布虽然不需要较多的dll,发布简单、方便,但是往往会牵扯到授权问题(详

daluluhuajian224949的专栏 667

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: qt中如何用qDebug输出彩色调试信息
下一篇: QT开发的视频监管平台分享
cocoasprite
博客等级 码龄14年 72粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值