设为首页 加入收藏

TOP

【golang-GUI开发】Qt项目的打包发布(一)
2018-10-19 15:51:31 】 浏览:134
Tags:golang-GUI 开发 目的 打包 发布

这是本系列的第三篇文章,前两篇我们讲了qt的安装和编译,今天我们讲一讲程序的打包。

好像我们现在都没怎么讲到qt的使用,因为想要放开手脚写代码,一些基础是要打牢的。

不过请放心,下一篇文章开始我们就会真正进入正题了。

这是针对使用qtdeploy时的打包教程,不适用于使用qt-tools + go build进行构建的情况

 

打包

首先我们做一些打包前的准备工作,没错,做事之前先做好准备是个好习惯:-p。

这次用于打包的仍然是一个小例子,将一张图片缩小一半显示出来,这个例子正好需要使用外部资源,因此我也会在其中展示qrc的用法。

项目结构:

tree makedeb

makedeb ├── images │   └── 1.jpg ├── main.go └── makedeb.qrc

没错,images里的就是我们要显示的图片,makedeb.qrc是我们的资源配置文件,因为是打包发布,所以我们使用qrc来同一管理外部资源。

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
     <file>images/1.jpg</file>
</qresource>
</RCC>

qrc的配置和原生Qt一样,这里不多做解释。

下面是主程序:

 1 package main
 2 
 3 import (
 4     "os"
 5     
 6     "github.com/therecipe/qt/gui"
 7     "github.com/therecipe/qt/core"
 8     "github.com/therecipe/qt/widgets"
 9 )
10 
11 func main() {
12     widgets.NewQApplication(len(os.Args), os.Args)
13     
14     window := widgets.NewQMainWindow(nil, 0)
15     window.SetWindowTitle("Test deb package")
16     
17     img := gui.NewQPixmap5(":/images/1.jpg", "", core.Qt__AutoColor)
18     size := img.Size()
19     img = img.ScaledToHeight(size.Height()/2, core.Qt__FastTransformation)
20     img = img.ScaledToWidth(size.Width()/2, core.Qt__FastTransformation)
21     
22     canvas := widgets.NewQLabel(window, 0)
23     canvas.SetPixmap(img)
24     
25     window.SetCentralWidget(canvas)
26     window.Show()
27     
28     widgets.QApplication_Exec()
29 }

将图片读取至QPixmap,然后在使用QLabel来显示的简单例子,其中

img := gui.NewQPixmap5(":/images/1.jpg", "", core.Qt__AutoColor)

“:/images/1.jpg”表示按照.qrc指定的规则来获取资源文件1.jpg。

接下来就是编译了,只需要简单的一条代码

qtdelpoy build desktop makedeb

再看一看现在的目录结构:

makedeb
├── deploy
│   └── linux
│       ├── lib
│       ├── makedeb
│       ├── makedeb.sh
│       ├── plugins
│       └── qml
├── images
│   └── 1.jpg
├── linux
├── main.go
├── makedeb.qrc
├── rcc_cgo_linux_linux_amd64.go
└── rcc.cpp
View Code

如上一篇文章所说,qtdeploy会自动调用qtrcc去解析.qrc文件生成rcc.cpp和rcc_cgo_*.go,里面包含有我们在.qrc文件里指定的资源。

下面我们对生成的目标打包,如何制作deb包可以点击这里

我们需要新建一个用于打包的目录:build

然后在build里创建目录DEBIAN,这个目录里的文件用于控制包的信息和安装/卸载前后的行为。

mkdir build && cd build
mkdir DEBIAN

打包时会把指定目录下所有文件包含进去,解包时会将除了DEBIAN目录之外所有目录和文件按照在build目录里的结构解压到根目录/ 之下。

举个例子,build里有个目录usr/local/bin/test,打包后安装时会被安装到/usr/local/bin/test,如果有etc/test那么就会安装到/etc/test。

所以我们需要根据想要的安装路径来在build目录里创建这些目录,我想把程序安装在/usr/local/bin下,所以这样创建目录:

mkdir usr/local/bin/

根据上一篇文章的讲解,运行我们的程序需要deploy/linux里的lib,plugins,qml这三个目录和makedeb,makedeb.sh这两个文件,所以我们把他们复制到打包的目录里:

mkdir usr/local/bin/makedeb_bin
cp -r ../deploy/linux/lib usr/loacl/bin/makedeb_bin/
cp -r ../deploy/linux/plugins usr/local/bin/makedeb_bin/
cp -r ../deploy/linux/qml usr/local/bin/makedeb_bin/
cp ../deploy/linux/makedeb usr/local/bin/makedeb_bin/

为什么我们没有复制makedeb.sh?而且makedeb_bin目录建立的意义是什么?

因为一篇文章里说过,这个脚本在打包时有问题需要一点改造,现在我们就来改造它了。

原先的脚本只能在和程序同一目录下才能工作,所以我们想使用它的话就要把deploy/linux/...直接复制到usr/local/bin里,如果只有这一个包那么没问题,但是如果你写了其他的Qt程序,然后打包安装在了同一目录下,那么这个安装目录里就会有两个lib目录,两个plugins目录。。。。当然同时存在两个同名目录是不可能的,后一个会覆盖前项,如此一来之前安装的程序很可能就会因为使用了错误的依赖项导致异常,这是不可接受的。

解决办法并不复杂,我们把程序和他的依赖放入一个projectname_bin的目录里,然后在

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇用go实现简单的冒泡排序 下一篇golang基础--strcut结构体

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目