1.13 qt.go 资源系统

09 资源系统

资源系统包含一些图片,之前用go-uic 生成界面文件.而资源文件在qt中用*.qrc.

Qt 的资源系统用于存储应用程序的可执行二进制文件,采用平台无关的机制.
当你的程序总需要这样的一系列文件(图标、翻译文件等)并且不想冒丢失某些文件的风险时,这就显得十分有用.

资源集合文件(.qrc)

与程序相关的资源在被指定在一个 .qrc 文件中,其基于 XML的文件格式列出了磁盘上的文件,可以为它们指定一个应用程序访问资源时必须使用的资源名称.

<RCC>
  <qresource>
    <file>images/logo1.png</file>
  </qresource>
</RCC>

咱们手动的新建一个文件 01_rcc.qrc,在里面添加以上代码.
在这里插入图片描述
注意images/logo1.png文件必须在01_rcc.qrc的当前目录或子目录

咱们用go-rcc.exe 01_rcc.qrc 来编译
在这里插入图片描述

注意若编译不是上方出现的样子,用git bash 来编译,
咱们在程序中,新建一个 QLabel,和07_QLabel界面代码是一样的.
在main函数中

mw.Label.SetGeometry(10, 10, 200, 200)
// 不支持jpg,QPixmap/QImage不能读取jpg图像,但是可以读取bmp,png图像。
// "bmp", "pbm", "pgm", "png", "ppm", "xbm", "xpm" ,也就是目前只能支持这些格式。
//var pixmap *qtgui.QPixmap
//pixmap = pixmap.NewForInherit3p("/images/logo1.png")
pixmap := qtgui.NewQPixmap3p(":/images/logo1.png")
mw.Label.SetPixmap(pixmap)
mw.Label.SetFixedSize1(100, 100)
mw.Label.SetScaledContents(true)

go build

编译后执行

在这里插入图片描述

咱们可以这样依次增加图片文件等等.需要带有 "?"前缀,或者有qrc scheme的URL。

例如 :/images/logo1.png 或者 ?/images/logo1.png ,这看起来第一个更为方便.

mw.Label.SetGeometry(10, 10, 200, 200)
pixmap := qtgui.NewQPixmap3p("://images/logo1.png")
mw.Label.SetPixmap(pixmap)
mw.Label.SetFixedSize1(100, 100)
mw.Label.SetScaledContents(true)

都可以访问在程序代码树中位置为 images/logo1.png 的 logo1.png文件.

用文件标签的别名属性可以改变访问名称:

1.把资源文件复制一份修改为02_rcc.qrc ,并修改为

<RCC>
  <qresource>
    <file alias="logo1-img.png">images/logo1.png</file>
  </qresource>
</RCC>

main 代码修改为

mw.Label.SetGeometry(10, 10, 200, 200)
pixmap := qtgui.NewQPixmap3p(":/logo1-img.png")
mw.Label.SetPixmap(pixmap)
mw.Label.SetFixedSize1(100, 100)
mw.Label.SetScaledContents(true)

go-rcc 02_rcc.qrc
go build
之后在程序中就可以使用:/logo1-img.png 访问此文件了. 但感觉不如路径有感觉.

其实 rcc的前缀默认为 /,即 qresource prefix="/". 如,和上面的例子01_rcc.qrc差不了多少.

<RCC>
  <qresource prefix="/">
    <file>images/logo1.png</file>
  </qresource>
</RCC>

咱们可以借助 Qt Designer 来建立qrc资源.首先随便建立一个窗口,在界面的右下角.

在这里插入图片描述

点击这个笔,保存为04_rcc.qrc,添加前缀"/",或者在右键弹出的弹窗,点击添加前缀,后面添加文件.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
点击ok后, 会有图片出来,右键有复制路径 :/images/logo1.png ;

在这里插入图片描述
发现生成的文件为 :

<RCC>
  <qresource prefix="/">
    <file>images/logo1.png</file>
  </qresource>
</RCC>

当然前缀不一样情况就不一样.

还可以使用 qresource 标签的前缀属性为 .qrc 文件中列出的所有文件指定路径前缀:

比如再次添加前缀 .qrc文件变为qresource prefix="/Images;

其中的g8.png 路径为 :/Images/images/g8.png
在这里插入图片描述

<RCC>
  <qresource prefix="/">
    <file>images/logo1.png</file>
  </qresource>
  <qresource prefix="/Images">
    <file>images/g8.png</file>
  </qresource>
</RCC>

修改源代码后

pixmap := qtgui.NewQPixmap3p(":/Images/images/g8.png")

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值