Qt-程序发布
来源:互联网 发布:ubuntu安装git失败 编辑:程序博客网 时间:2024/05/16 15:33
Windows篇1. 当发布程序缺少插件库(dll形式)时,程序运行时不会提示“缺少xxx.dll”。
2. 发布程序在装有Qt开发环境的PC运行正常,而在没有装Qt开发环境的PC运行出现异常有可能是缺少插件库所致。
3. 发布程序时,插件库与非插件库的处理不同。非插件库可直接把dll文件拷贝至exe文件所在目录或Windows系统目录或环境变量指定的目录,而插件库在拷贝时必须保持 Qt/x.x.x/plugins 目录下各个插件目录原有的目录结构,否则程序无法找到该插件库,从而导致程序运行异常。
例如:ODBC数据库驱动插件的目录为 Qt/x.x.x/plugins/sqldrivers,程序发布时必需把sqldrivers(可根据实际情况精简不需要文件)目录拷贝至exe文件所在目录才能确保程序正常运行。
在上述例子中,如果希望重新指定sqldrivers目录的位置,则可使用以下方法指定。
QApplication::addLibraryPath(QString path);
例如:在代码中添加:QApplication::addLibraryPath(QDir::currentPath() + "/dll"); 意思是把sqldrivers指定到exe所在目录中的dll目录下。接着把sqldrivers拷贝到dll目录下,这样就实现了把sqldrivers目录指定到其他的位置。
! 对于非插件库,暂时找不到方法重新指定其路径。因此发布程序时,非插件库与可执行程序只能放在同一目录下,也可以把被插件库的路径添加到环境变量中。
4. Windows下发布程序中,默认支持的图片格式:*.png,默认不支持:*jpg。
- 可执行文件图标设置
1. 将icon文件(假设为“favicon.ico”)拷贝至工程目录中(.pro文件所在的目录)
支持格式:*.ico
不支持格式:*.png
2. 在Qt Creator中创建一个扩展名为“.rc”的文本文件(假设为“release.rc”),并加入如下内容:
IDI_ICON1 ICON DISCARDABLE "favicon.ico"
3. 编辑.pro文件
此时.pro文件应该有:
OTHER_FILES += \
release.rc
在下面添加如下内容:
RC_FILE = \
release.rc
4. 重新编译
编译完成后,可执行文件的图标将变成和“favicon.ico”相同
1. 将icon文件(假设为“favicon.ico”)拷贝至工程目录中(.pro文件所在的目录)
支持格式:*.ico
不支持格式:*.png
2. 在Qt Creator中创建一个扩展名为“.rc”的文本文件(假设为“release.rc”),并加入如下内容:
IDI_ICON1 ICON DISCARDABLE "favicon.ico"
3. 编辑.pro文件
此时.pro文件应该有:
OTHER_FILES += \
release.rc
在下面添加如下内容:
RC_FILE = \
release.rc
4. 重新编译
编译完成后,可执行文件的图标将变成和“favicon.ico”相同
- 发布的QT程序无法显示图标和图片的问题
在windows下编译好的QT程序在其他没有安装QT的机器上会出现图标和图片无法正常显示的问题。
这时我们可以通过以下方式来解决:
在release文件夹里创建plugins文件夹,并将QT安装目录下的plugins\imageformats文件夹复制到release\plugins文件夹(imageformats文件夹包含了许多图片格式的插件,如jpeg等)。
然后最重要的一步是在main.cpp中添加:QApplication::addLibraryPath("./plugins");
编译程序之后再发布就即可。
! 用上述的方法可以重新指定插件库的位置
! 用上述的方法可以重新指定插件库的位置
项目中使用到了sqlite数据库,release生成exe后,需要打包发布。
在文件同级目录下建立子目录plugins/sqldrivers存放插件dll。项目中只用到了sqlite,所以只携带qsqlite.dll即可:plugins/sqldrivers/qsqlite4.dll
同时,在exe所在目录下建立qt.conf的配置文件,内容如下:
[Paths]
Prefix=.
Plugins=Plugins
Prefix=.
Plugins=Plugins
这样就可以保证程序可以找到相关的dll了
Qt打包发布(NSIS详解)
转自 http://blog.sina.com.cn/s/blog_a6fb6cc90101fer8.html
发布方式 Qt发布的时候,通常使用两种方式: (1)静态编译 (2)动态编译 静态编译:把相关联的库一并引入可执行程序,虽然发布简单,但可执行程序较大。。。 动态编译:相关联的库,以dll的形式引用,不被包含进可执行程序,发布不方便,但可执行程序较小。。。 静态发布虽然不需要较多的dll,发布简单、方便,但是往往会牵扯到授权问题(详情请查看Qt LGPL授权),动态发布则可以避免。。。如果附带了Qt的dll,就相当于发布了Qt的dll,而这些库是属于Qt的,这足以保证使用者知道程序使用了LGPL版本的Qt(这部分还有待探讨)。
下载工具:Dependency Walker 打开可执行程序,检测依赖项
检测完成之后,将所需依赖库拷贝进去。。。再次进行检测,反复进行。
Qt5Cored.dll Qt5Guid.dll Qt5Widgetsd.dll icudt51.dll icuin51.dll icuuc51.dll libEGLd.dll libGLESv2d.dll 图片支持库:imageformats 音频、视频支持库:mediaservice 平台支持库:platforms 等等。。。 注意:查找对应的插件文件夹,粘贴到安装目录(一定要保持目录结构,例如“platforms/***.dll”),详细结构见打包发布准备的文件组织结构。 msvcp100d.dll msvcr100d.dll
注意: 发布程序的时候注意版本(Debug/Release) 如果是Debug版本的则是.前面带d的(Qt5Cored.dll、Qt5Guid.dll、Qt5Widgetsd.dll) 如果是Release版本的则是.前面不带d的(Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll) 以上是我所用到的依赖库,基本可以解决问题,包括:
一款免费的Win32安装、卸载系统! 脚本简洁高效、系统开销小,进行安装、卸载、设置、解压文件也不在话下,几乎可以做所有的事情。
NSIS Edit + NSIS
脚本向导 + 修改代码 = 个性化安装包
以下是我即将打包的所有文件,安装包目录结构(包括:可执行程序、插件库、运行时库、授权文件、卸载程序图标等等!)如下图所示:
注意:这里选择语言为SimpChinese
大功告成之后,即可进行安装!
关于Qt的打包工具了解一些,个人感觉NSIS用起来比较顺手,脚本修改起来也方便,所以就推崇一下。。。若想将安装包变得更加美观,则需要手动修改脚本,更多信息请查找相关资料,此处不再多做介绍!
查找依赖项
1、检测可执行程序依赖模块
2、常用依赖库
(1)Qt模块库
(2)ICU依赖库
(3)EGL依赖库
(4)插件库(Qt安装目录下即可找到D:\Software\Qt\Qt5.1.0\5.1.0\msvc2010\plugins\platforms)
(5)VS运行时库(在VS安装目录下即可找到D:\Software\Microsoft Visual Studio\VC\redist)
关于NSIS
1、NSIS简介
(1)NSIS是什么?
(2)NSIS有什么特点?
2、工具
3、使用方式
准备文件
1、利用向导制作安装包:
2、填写应用程序基本信息
3、指定安装程序所用选项
4、设置应用程序安装目录与授权文件
5、指定应用程序文件
6、指定创建应用程序图标
7、选择安装程序完成后运行的动作
8、指定接触安装程序属性
9、进行脚本编译、保存
10、等待编译完成,即可运行打包后的安装包
(1)安装程序
(2)此处显示授权文件中的内容
(3)选择安装目录
(4)运行程序,并显示“自述文件”
(5)运行结果
0 0
- Qt程序发布
- Qt 发布程序
- 打包发布qt程序
- QT程序设计-发布程序
- 如何发布Qt程序
- qt程序发布
- QT程序的发布
- QT下发布程序
- QT程序打包发布
- QT程序发布
- Qt 程序发布
- Qt-程序发布
- Qt程序发布 ubuntu
- Qt程序 发布过程
- qt程序的发布
- Qt程序发布
- QT程序打包发布
- qt+opencv程序发布
- 如何从 Google Play 下载 Android 程序到电脑上
- Volume 1. Elementary Problem Solving :: Sorting/SearchingUva 340,10420,10474,152,299,120,156,400,755
- AndroidManifest.xml文件的作用和简单使用
- 求高精度幂
- 关于vs2010输出界面闪烁一下就关闭的问题
- Qt-程序发布
- 读书笔记(1)
- STL vector中的emplace_back方法(24)
- 017
- Python String和PyQt QString的区别(转) http://blog.sina.com.cn/s/blog_4b5039210100h9kp.html
- WebView学习2
- 转载小满的
- Fragment嵌套Fragment的时候容易出现白屏的现象
- poj 1151 Atlantis “线段树维护关键值”+“离散化”+“扫描线法”