添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

当我们用QT写好了一个软件,要把你的 程序 分享出去的时侯,不可能把编译的 目录 拷贝给他人去运行。编译好的程序应当是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装文件。

QT开发的程序发布的时侯常常采用两种方法:

l 静态 编译,可生成单一的可执行文件。

l动态编译,需同时附上须要的dll文件。

2.发布打算

不管采用哪种方法,首先我们要把项目的发布做一些打算linux设置默认网关,比如:打算程序的 图标 ,将项目编译成release等。

2.1.设置程序图标

应用 程序的图标分两种:

l主窗口图标,主要在程序运行时显示在主窗口左上角,或在任务栏上显示。

l运行程序图标,通常在桌面或文件夹中显示的缩略图标,可以点击后运行程序。

2.1.1.设置主窗口图标

首先在绘图工具(比如Photoshop)中设计好图标,图标的帧率最好小于32*32。图标须要用*ico或*png的文件。假如想偷懒一点,直接去这儿()下载,大量好看免费的图标。

将昨天的生成的图标文件放在yourProjectFolder/Resources/images目录下,或则任意一个程序可以找到的位置。最好将图标文件添加到qrc中统一管理,qrc文件的格式如下:

christmas_stocking.png

之后再主窗口中使用,代码如下,代码很简单,不过记住这句代码一定要放在Mainwindow的构造函数里去,不然不会work。

/*setwindowicon*/

setWindowIcon(QIcon(QStringLiteral(":/background/mainlogo")));

程序运行后的疗效如下:

2.1.2.设置运行程序的图标

设置运行程序的图标在各个平台是各不相同的,下边分别介绍。首先打算帧率最好小于32*32的图标文件。图标须要用*ico的文件。

1)Windows平台

A)使用VisualStudioIDE开发工具

假如使用的是VisualStudioIDE开发工具,比如在VS2015中,项目上右击,添加,资源,选择icon,之后将之前打算的*ico图标文件导出,确定以后项目中都会出现一个projectname.rc的文件。

B)使用QTCreator的IDE开发工具

假如你是使用qmake生成makefile文件或使用QTCreatorIDE,这么按下边三步施行:

l第一步:创建一个包含图标图象的ICO文件,并将其保存在资源文件目录下,比如命名为:myapp.ico;

l第二步:创建一个.rc文件,包含如下内容:

IDI_ICON1ICONDISCARDABLE"myapp.ico"

l第三步:在工程文件myapp.pro文件中写入如下内容:

RC_FILE=myapp.rc

再度编译程序,即可达到疗效,疗效图如下:

2)MacOSX平台

尽管许多程序可以创建图标文件(.icns),推荐的方式是使用由苹果公司提供的程序iconutil。Iconutil是一个 命令 行工具,它容许您导出多个不同大小的图标(在不同的上下文中使用),并能压缩文件。在您的项目目录上将所有一系列的图标保存在一个文件中。

倘若您正使用qmake生成makefile文件,您只须要将一个单一的行添加到您的.pro工程文件。诸如,假若您的图标文件的名称是myapp.icns,而且您的项目文件名称是myapp.pro,加入这一行到myapp.pro:

ICON=myapp.icns

这将确保qmake把你的图标放到适当的位置并为图标创建一个Info.plist条目。

假如你不使用qmake,你必须自动执行以下几点:

1)为您的应用程序(使用PropertyListEditor,在Developer/Applications中可以找到)创建一个Info.plist文件。

2)在Info.plist文件(同样,使用PropertyListEditor)关联您的.icns记录和CFBundleIconFile记录。

3)将Info.plist文件复制到你的应用程序包的Contents目录。

4)复制.icns文件到你的应用程序包的Contents/Resoures目录。

3)通用的 Linux 平台

在本节中,我们简略地介绍一下在两种常见的Linux桌面环境:KDE和GNOME linux qt程序打包发布 ,为应用程序提供图标的相关问题。为这两种桌面,拿来描述应用程序图标的核心技术是相同的 linux qt程序打包发布 ,也可以适用于其他,但具体到每一个来讲也有各自的细节。对使用这种Linux桌面 系统 的标准信息的主要来源是。有关其他Linux桌面的信息,请参阅您感兴趣的桌面文档。

一般情况下,用户不直接使用可执行文件,而是通过点击桌面上的图标来启动应用程序。那些图标是包含带有关于它的图标信息的应用程序的描述表示的“桌面项”文件。这两种桌面环境都还能在那些文件中检索信息,但是可以用它们来世成应用程序的快捷方法到桌面上,在开始菜单中,或则在面板上。

有关桌面项文件的更多信息,可以在DesktopEntrySpecification中找到。

尽管桌面项文件可以有效地封装应用程序的详尽信息,我们依然须要将图标存贮在每位桌面环境中的常规位置。用于图标的一些位置在IconThemeSpecification中给出了。

尽管用于定位图标的路径依赖于在桌面上的使用和它的配置,下边所有这种目录结构应当遵守相同的模式:子目录都依照主题,图标大小和应用程序类型进行组织。一般,应用程序图标被添加到高彩主题,因而圆形的应用程序图标的大小为32象素,它将被储存在hicolor/32x32/apps目录的图标路径的下方。

1、K桌面环境(KDE)

应用程序图标可以被所有用户或则一个单一的用户安装使用。当前登入到她们的KDE桌面的用户可以通过使用kde-config发觉这种位置,比如,通过在终端窗口中键入执行下述操作:

kde-config--pathicon

一般情况下,被输出到stdout的以逗号分隔的路径列表中包含了用户特定的图标路径和全系统的路径。下边这种目录中,可以按照在IconThemeSpecification中描述的约定来定位并安装图标。

倘若您正在专门为KDE开发,你不妨借助KDEbuildsystem的优势来配置您的应用程序。这可以确保你的图标被安装在KDE的适当位置。

KDE的开发者网站是。

2、GNOME

应用程序图标都储存在包含与体系结构无关文件的一个标准全系统目录下。这个位置可以通过使用gnome-config来确定,比如,通过在一个终端窗口中键入以下命令:

gnome-config--datadir

输出在标准输出stdout的路径指的是包含一个名为pixmaps目录的位置;这个pixmaps目录中的目录结构中在IconThemeSpecification中进行了描述。

倘若您正在专门为GNOME开发,你可能希望使用一组标准的GNUBuildTools,在GTK+/GnomeApplicationDevelopmentbook的相关章节也作了说明。这可以确保你的图标被安装在为GNOME中的适当位置。

2.2.编译release版本

注意将运行程序编译方法设置成Release,由于debug版本的程序中包含了调试信息,可以拿来调试。而真正要发布程序时,要使用release版本,这样可以降低发布程序的容积同时降低软件的安全。

上图演示在QtCreator中的设置方法,选中IDE左侧的侧边栏的项目,之后再建立设置上将建立配置设置为Release。

上图演示在VS2015中的设置方法,选中IDE左侧的解决方案管理器中的项目,之后在IDE上面的工具栏上将建立配置设置为Release。

3.发布程序

安装QTSDK后,默认采用的是动态链接库的编译方法,假如须要发布程序,须要在可执行的文件中添加必须的动态链接库,但是有些动态链接库文件很大,这并不是我们想要的结果。

最好的办法是递交一个静态链接的程序。并且安装的Qt是动态编译的,要生成静态的版本,就须要自己重新进行编译。

3.1.静态编译

l优点,发布简单,单一文件。

l缺点,库文件很大,更新程序版本不便捷。每次升级,都要重新分发所有的内容。

静态发布似乎不须要较多的dll,发布简单、方便,而且常常会牵涉到授权问题(详情请查看QtLGPL授权),动态发布则可以防止。。。假如附送了Qt的dlllinux是什么,就相当于发布了Qt的dll,而這些库是属于Qt的,这足以保证使用者晓得程序使用了LGPL版本的Qt。

1)Windows平台静态编译

静态编译首先须要将

mingw平台静态编译,在编译Qt的时侯,有个configure.exe程序,

configure.exe-static-platformwin32-g++

可以形成静态编译项目文件。之后,

mingw32-makesub-src

就可以编译出静态库。倘若只是拿来分发程序,也可以mingw32-makereleasesub-src只编译一个静态库。

VC2015平台,在编译Qt的时侯,configure.exe-static-platformwin32-msvc2015

之后nmakesub-src或则nmakereleasesub-src完成静态编译。

再之后,就是把你的程序重新用静态编译的Qt再编译一次。

你会得到一个特别大的可执行程序。推荐使用AspPack压缩一下。就可以发给用户了。

2)linux平台静态编译

1、下载源安装程序,如qt-everywhere-opensource-src-5.5.1.tar.gz

2、解压到某一目录

3、cd步入解压后的目录,命令:

./configure-static-release-qt-zlib-qt-gif-qt-libpng-qt-libmng-qt-libjpeg-nomakedemos-nomakeexamples-qt-sql-sqlite-prefix/usr/local/Trolltech/Qt-5.5.1_static

参数-static指的是要采用静态编译Qt的方式

参数-release指的是只编译release版本的库

参数-qt-zlib-qt-gif-qt-libpng-qt-libmng-qt-libjpeg是更好确定Qt编译出的程序能在目前不知的系统下运行。

参数-nomakedemos-nomakeexamples指的是不编译demos和examples

参数-qt-sql-sqlite假如没有这个参数,configure的时侯,可能会提示sqlite有问题而终止。

参数-prefix/usr/local/Trolltech/Qt-5.5.1_static指明静态编译的Qt安装的目录,命名Qt-5.5.1_static是为了区别动态编译安装的Qt,由于假如没有这个参数,安装时会覆盖之前动态编译安装的Qt(假如有的话)。

u注:假如出现错误:BasicXLibfunctionalitytestfailed!

Youmightneedtomodifytheincludeandlibrarysearchpathsbyediting

QMAKE_INCDIR_X11andQMAKE_LIBDIR_X11

解决办法:yuminstalllibX*

(假如是Ubuntu也可运行sudoapt-getinstalllibx11-devlibxext-devlibxtst-dev)

4、没问题后

5、make没问题后再

sudomakeinstall

6、增加(或改变)环境变量:(也可以不添加环境变量,使用绝对路径进行编译),在你home目录下你的的名子的目录中,在.profile文件中追加(或改变)如下环境变量:(为Qt设置一些特定的环境变量,这个很重要!.profile文件是隐藏的,可在你的名子目录下,按Ctrl+H显示所有文件查看到)

QTDIR=/usr/local/Trolltech/Qt-5.5.1_static/

PATH=$QTDIR/bin:$PATH

MANPATH=$QTDIR/doc/man:$MANPATH

LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

exportQTDIRPATHMANPATHLD_LIBRARY_PATH

8、在终端测试一下qmake

3)MACOSX系统平台静态编译

在MACOSX系统平台下静态编译QT应用还是比较麻烦的,首先须要静态编译QT应用依赖的各个库,之后再进行联接生成运行文件,具体步骤参看链接:。

3.2.附加Dll文件

l优点,更新便捷,发布多个产品时,可以统一使用一个库。

l缺点,文件多、杂。

Qt官方开发环境默认使用动态链接库形式,在发布生成的可执行程序时,我们须要复制一大堆动态库,假如自己去复制动态库,很可能丢三落四,造成程序在别的笔记本里未能正常运行。因而Qt官方开发环境里自带了一个布署工具来帮助开发者手动拷贝大部份的依赖库。在不同的平台使用方法也有所不同。

1)Windows平台

Windows开发环境下windeployqt工具(假如你早已将Qt的bin目录加入PATH环境,这么你可以直接在命令行使用windeployqt调用.)。首先,将项目中的release文件中的可执行文件拷到一个新建的文件夹中,比如project.exe,用Qt自带的生成必备的dll文件的程序windeployqt,来把必要的动态库拷到该文件夹中,打开命令行,输入windeployqtproject.exe,这时侯大部份的dll文件都手动拷贝过来了,而且假如项目还用了一些其他的SDK,例如OpenCV,Chartdir51等等,就须要自动将所需dll拷贝过来,假若不晓得还须要什么软件,可以用DependencyWalker来查看缺乏什么dll文件。

拷贝完成后文件夹下的文件清单如下:

注意:假如发布的应用是QtQuickApplication应用,这么命令行须要加上QML的安装目录。命令中的D:QtQt5.5.1qml是qml的安装目录,请换成你自己的qml安装目录!!!!!

windeployqthello.exe--qmldirD:QtQt5.5.1qml

接出来要高大上的同学就可以用EnigmaVirtualBox软件虚拟化工具将多个文件封装到应用程序主文件,因而制做成为单执行文件的红色软件。

2)linux平台

在X11平台下qt程序,首先打算好程序中须要使用的资源,库和插件...,例如你的可运行程序起名叫作panel,那把你的panel,这些libQt*.so.4和libQt*.so.4.6.0(链接和共享库都要)置于同一目录下(也可以不同,只要小小更改下shell文件).plugins就不多说了。

在程序的同目录下,新建一個空文档,起名panel.sh(文件名与程序名同名,扩充名为sh,shell文件)。在panel.sh中原封不动的写入以下句子:

#!/bin/sh

appname=`basename$0|seds,/.sh$,,`

dirname=`dirname$0`

tmp="${dirname#?}"

if["${dirname%$tmp}"!="/"];then

dirname=$PWD/$dirname

LD_LIBRARY_PATH=$dirname

exportLD_LIBRARY_PATH

$dirname/$appname$*

保存文件,退出。在终端給文件+x属性:切换到程序的目录,输入

chmod+xpanel.sh

之后运行shell文件就行了(确保panel程序具备X属性),它会手动修改环境变量,运行程序。

假如要调试shell文件,只须要在终端输入:

sh-xpanel.sh

这样就ok了。

假如须要把执行程序制做成DEB或RPM包的话请参考链接:

DeployingaQt5ApplicationLinux:

3)MACOSX系统平台

因为Qt的库并不是OSX标配的,所以我们要自己去复制库到app包里,才可以让app在其他未安装Qt的笔记本上运行。

比较辛运的是,Qt为我们提供了macdeployqt工具,利用于此,在OSX上发布Qt写的程序几乎是所有平台中最简单的。

注:我笔记本配置了Qt的bin环境,所以可以直接使用macdeployqt,倘若没配置,可以用绝对路径去找。

1.发布widgets程序

a)这个比较便捷。选择Release模式,编译

b)运行macdeployqt

对于我的工程,命令是:

macdeployqt/Users/Ocean/Desktop/build-untitled-Desktop_5_5_1_64bit-Release/untitled.app-dmg

之后回车,就打包好了。然后我们会发觉,app目录下多了一个dmg文件

此dmg文件,上面的app就是我们发布的app了。把dmg拷贝给他人,他人就可以直接使用了。

l注:倘若直接拷贝app文件给他人,他人是难以直接运行的,会有权限问题(要用chmod给可执行文件加上x权限才可以运行)。而压缩过(zip或则dmg)后,拷贝给他人,他人是可以直接运行,没有权限问题。

l注:-dmg的意思就是在拷贝好库后,生成一个dmg文件,可以不加这个参数。

2.发布quick2程序

这个相对麻烦一点

a)选择Release模式,编译

b)打开终端,先切换编译的目标目录下

对于我的工程,命令是:

cd/Users/Ocean/Desktop/build-untitled-Desktop_5_5_1_64bit-Release

c)运行macdeployqt

对于我的工程,命令是:

macdeployqtuntitled.app-qmldir=../untitled-dmg

之后回车,就打包好了。

l注1:和widgets发布程序不同,untitled.app这个名子,要直接输入,不要写./untitled.app或则是其他的绝对/相对路径,不然打包下来的文件难以使用!!会报错!!!

l注2:-qmldir=../untitled的意思就是说在../untitled目录下有qml文件,让macdeployqt去剖析它们,把要用的库找过来。

最后更新:2023年12月26日 电脑重装系统后 USB 接口不能用?这个方法帮你解决 从 ASP 到 ASP.NET:动网先锋与虚拟主机的二十年历史变迁 linux安装redis Linux 学习资料大整理,涵盖视频、电子书、PPT 等,助你技术提升 嵌入式 Linux 知识库:设备树格式的发展与应用 Linux 系统下如何设置 FTP 账号和密码进行文件传输 设备树的加载与编译:问题解决与经验分享 了解编程的关键:日志系统与重要日志文件的简述 在 ZedBoard 上启用轻量级 Linux:开源小巧的嵌入式系统首选 Eclipse 简介:基于插件结构的集成编译器,支持 JAVA 和 C/C++ 项目 centos dhcp配置 Centos7 获取 IP 地址的两种方法及详细步骤 服务器部署常见问题:iptables 开放 80 端口解决方案 linux性能测试软件 赣州市国投集团:四轮驱动发展战略,打造国有资本运营典范 深入了解 iptables:后端服务器开发必备的防火墙知识 在 Linux PC 上运行安卓应用和游戏的多种方法,你知道吗? 深入解析 Linux 内核自解压过程:从启动到完成 Ubuntu 22.04 LTS 安装其他版本内核并修改默认内核版本的详细记录 CentOS Stream 9 收录范围、使用方法及源文件替换教程 C 站最萌博主东洛的克莱斯韦克,带你体验不一样的 Linux 开发之旅 深入解析动态库版本兼容问题:Dll Hell 难题的解决之道 查询 mac 地址的命令有哪些?MAC 地址是什么?一文详解 vi 编辑器的模式与常用命令解析及 Linux 视频教程推荐 安卓手机免 ROOT 运行 alpine linux 之安装与部署网心云容器魔方 win10 远程连接 centos7 和 ubuntu16.04 的简单指导 测试环境迁移后 MySQL 密码丢失?教你如何用旧密码登录 Linux 基础命令之 sed 命令:查看/编辑文件内容介绍 掌握 CentOS 版本检查方法,了解系统支持期限及迁移决策 Linux 中运行.pl 文件的方法详解:快速掌握 Perl 编程 如何检查 CentOS Linux 发行版的版本? Linux 环境变量配置文件介绍及操作环境说明 提升 Linux 技能:深入了解文件系统的基础概念 深入了解二进制文件:常用工具及命令解析 Jenkins 安装教程:WAR 包安装与 JDK 环境配置 哈工大操作系统原理与实践 Lab 全实验博客链接及 write.c 解析 深入了解 Linux 用户概念与管理命令:useradd、usermod 和 userdel Unix 卷发棒:小巧便携,多功能设计,呵护秀发,韩国制造,无需转换插头 Linux 用户管理与文件管理:高效安全操作指南 Linux 系统中生成 exe 格式可执行文件的方法 如何实现不同系统电脑之间的远程桌面操作及调试? (Linux基础知识)Linux系统时间的使用命令 Linux非空文件夹怎么删除呢?如何管理文件? (用户和组管理)用户/组基本概念andgroups 虚拟串口虚拟串行端口工具模拟和生成串口数据记录和仿真 制作Win10U盘启动盘和格式化USB的实用小工具 安利一个免费开源强大且易用的电子书管理器:Caliber550+ Fedora10安装了4,5个工具最高峰速度才100k 一个+delta状态到目前为止,我们将对该fuzzer的功能进行必要的扩展 windows中jenkins的下载安装和启动服务(/CD) Linux命令(中)篇中所包含的命令不像上篇 2009 年 12 月 30 日星期三 15:05 mkdir、rmdir、rm、touch、mv 命令的详细介绍 上图为操作命令行,网卡软件运行DHCP获取Ip地址 旧的安卓手机不要扔,可以拿来做一个微型的linux服务器 Linux系统中如何检查某个服务的运行状态 dcp无需设置SSH对等网络复制文件的开发者有哪些 如何设置后自动免登录直接进入Linux系统的配置文件 大佬教程:本章目录1.PXE概述1.1PXE的优点 0X0000000A代码和硬盘有关系怎么办?怎么解决? 深入了解二进制文件:常用工具及命令解析 Unix架构师技术联盟:Unix操作系统的前世今生
标签聚合