关于Qt客户端程序开发的一些思考

  • Post author:
  • Post category:其他


最近一直忙于新项目Qt客户端程序的开发工作,对于整个项目开发中的一些坑点做一些总结,余惟愿诸友远避之。

1、关于UI界面开发。我的建议是,能用贴图就贴图。尽管我们知道Qt提供了“强大”的qss功能,但是如果你想通过qss原封不动的实现ui效果,付出的时间和精力结对是翻倍的。另外,前提还得是你对qss非常熟悉,甚至精通。如果你只是懂一点皮毛,放弃吧。额外说明,css和qss是有略微区别的,某些默认的样式区别更大。建议老老实实贴图。有时候幸福和不幸福,只在你的一个简单选择~ 别逞强。当然如果是定制精美的UI控件,保证充裕的开发时间,qss还是值得一试的(既然都时间充裕了,那为何不用pianter去绘制~)

2、Qt开发客户端程序其实已经是一个比较完整的流程和体系。大概涉及到如下的几个点:

(1)程序的安装卸载。不可避免的我们都要为客户端制作发布包。现在的发布包其实一般只有两种,绿色免安装(给用户就直接点击可运行的),还有一种就是需要制作安装向导,引导客户进行程序的安装。工具的话网上开源的免费的诸多。只是善意的提示大家,注意防毒~ 但是,我们在这里说肯定不只是拿来可用就行。通常正式的产品对于安装卸载程序的定制要求是比较高的,包括UI定制,功能定制等。所以,不管是你使用何种工具,一定要非常精通,一招鲜吃遍天就好。

常用的打包工具有nsis、inno setup,Qt Installer Framework (简称QIFW)、Windows Installer XML(简称WIX),各有各的强大,不过想要掌握等同于你要学习一门新的语言。Qt开发者我是强烈建议学习下 QIFW框架的,定制界面的话需要掌握下JS~(重点了解下QIFW是如何实现打包这个功能的)

但是,作为一个纯粹的Qt开发者,我更建议您重今天开始自己使用Qt开发属于自己的打包工具,也别想得太复杂。一个打包工具无非三个部分:


打包部分

。将install安装向导、unistall卸载向导、以及application 文件打包。(这也是我建议您去了解下QIFW源码中这部分实现的原因)


install安装向导

。说白了就是一个带UI的应用程序,用于引导用户进行安装应用程序。那么他的核心功能就是

解包:将application和unistall 解压到用户指定的安装目录下

引导:用户查看licence、选择安装路径等等。当然也有很多细节,如下:

>>> 譬如系统判断(支持哪些操作系统)

>>> 权限判断(是否需要使用管理员权限启动)、

>>> 安装判断(首次安装、覆盖安装等?)

>>> 运行状态判断(是否程序已经在运行过程中)

>>> 错误提示信息

>>> 生成桌面快捷方式、开始菜单中的快速启动项

>>> 开机自启动

>>> 安装过程中的安装进度展示

>>> 安装完成后用户选择“立即体验”之类的可以启动安装目录下的目标应用程序或者提示用户需要“重启计算机”,并完成重启操作




Uninstall 卸载程序部分

。很明确的任务就是卸载应用和删除相关资源。包括桌面快捷方式、快速启动项、注册表信息(安装版本信息等、开机自启动项)、删除安装目录下的文件等等

总之一个原则,干干净净的安装,干干净净的卸载~

ps:博主最近自己用纯Qt实现了一套,有需求的朋友可以私聊~

(2)现代的Qt桌面客户端应用程序不可避免的要使用的无边框窗体。建议自己参考git上最棒的无边框窗体,或者自己独立实现一套无边框窗体组件,完美的实现一次,享用很多年~ 当然做的很棒,欢迎开源分享给大家,造福Qter。无边框窗体要注意几个细节:

> 最大化/向下还原、最小化、关闭基本功能的实现

> 支持可自定义的拉伸、移动;最好支持边界触碰,支持自动全屏,半屏;窗体在最大化状态移动时,支持自动还原到normal状态,对应

> 支持跨平台的实现~(当然有人肯定会说应用风格不是最好应该跟系统ui风格一致吗,别较真,我们只谈需求和技术实现)

(3)支持应用程序的自动升级更新。应用的更新包含自动更新和用户选择更新,细分又包含全量更新和增量更新。技术实现上又包含自更新和应用与引导程序之间的相互更新。参考比较国内大型的桌面软件,我们会发现其实自更新以及使用引导程序更新这两种方式都用的比较多~ 那自然,做桌面客户端一定得好好思考下如何实现这两种模式。

其次,更新下载又可以分为预下载和正式发布强制更新下载。预下载要包含限流、限更新数;更新较大的安装包还要考虑到是否支持断电续传的问题~

大家自己去发散的思考一下吧 ~ 博主思考不足的地方也希望大家在留言区群策群力,不吝指教~

(4)日志系统。一个好的项目必不可少的就是日志系统,Qt客户端的开发自然也必不可少。Qt自带Qtlog模块,当然我们还可以使用log4cpp等其他主流的日志模块。集成到我们的框架中,开新项目时候就不必反复弄了~

不知不觉中午了,出去搞点好吃的~ 下篇在跟大家聊聊我所经历的桌面Qt客户端的常用的零零散散一些技术点~



版权声明:本文为weixin_39568531原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。