分类 软件 下的文章

又到了每年闲下来,嚷嚷着要开坑新项目的季节了。然而仔细一想,去年挖坑说是要填的CHIP8还没有动手呢。

你怎么回事,小老弟.jpg

然而不得不承认的是,打开Visual Studio,创建好一个名为CHIP8的项目,可以说是人类历史上的一大壮举了。俗话说的好,良好的开端是成功的一半嘛。(大雾)

经历了今年整个冬春COVID的闭门不出,一个夏天的人心惶惶,一个秋天的摸爬滚打,让人感慨万千。又到了冬天,而一切又总算是回到了正轨。好在功夫不负有心人,过去几年的努力没有白费,未来几年总算不愁没饭吃了。

回到正题,Qt的部署方式和常规的应用开发是有区别的。普通应用的开发,只要把依赖库按照编译时的需求配置好,环境变量配置好,就可以带着到处跑。

但是Qt不行,如果按照传统思维的缺啥补啥的思路的话,Qt反而会报错,提示类似Qt安装损坏的信息。

后来到网上搜索后发现,Qt是有一套平台部署工具的(https://doc.qt.io/qt-5/windows-deployment.html),按照里面的说明,执行`windeployqt.exe`,即可自动完成应用部署。部署完成后,目标目录下会出现一大堆依赖文件,跟随应用一起打包即可

让Visual Studio在每次编译完成后自动部署Qt应用的方法是,右键项目->生成事件->生成后事件,在此可以利用Visual Studio的内置变量辅助完成自动部署指令的编写。可以理解为,在这里执行的命令行是通过cmd.exe执行的,因而需要使用CMD语法。

Release配置文件下的命令可以写成如下形式:

"$(QMake_QT_HOST_BINS_)/windeployqt.exe" --release "$(TargetPath)"

需要注意一下的是,如果不使用--dir选项指定为文件夹形式(让windeployqt.exe自行搜索Qt可执行文件)的话,$(TargetPath)位置需要填写项目的Qt可执行文件位置。

http://mscrmtechie.blogspot.com/2015/08/visio-open-group-and-close-group.html

在用Visio画图的时候,使用了一些内置的组合控件,双击编辑内容的时候会自动打开新的窗口(还会自动把组件放大到窗口尺寸)。编辑的时候挺爽,但是编辑完以后,发现无法退出该模式,只能在右下角切换回原本的视图(也就意味着实际上这个窗口并没有关闭)。

自己在Visio里摸了一大圈,只发现了怎么打开这窗口,没发现怎么关。重点是,有时候关闭vsdx文件,之后再重新打开的时候,跳出来的是这个子窗口,而不是正常的全文件视图,每次都要多点几下好麻烦。网上冲浪后得知,有一个非常隐蔽的组合键Ctrl + F4可以关闭当前选中的子窗口。

跟隔壁的优秀大学生(暂定)聊天后才后知后觉地发现,原来げんしん是拿Unity写的。

然而某次启动的时候,不知道怎么把Unity内置的画质设置窗口碰出来了。

后来很好奇这窗口是怎么弄出来的,就去查了一下,没有找到什么快捷键,但是发现了一个参数,可以在启动的时候主动调出那个窗口:

<game>.exe -show-screen-selector

但是在游戏里试了一下,发现并不能生效,应该是游戏启动后有主动加载用户设置的逻辑。

在实验室的内网搭了一个GitLab,结果没想到,没有经过任何配置的邮件服务居然是正常运行的。不过发现有一个问题是,由于是内网搭建,服务器显然是没有域名可言的,所以邮件发出去的时候顺便把内网地址也暴露出去了。这两天抽了点时间看一下,发现GitLab官方对这一块没有文档介绍,Email部分的似乎没有提到这个。

之前以为是改/etc/gitlab/gitlab.rb,然后sudo gitlab-ctl reconfigure,后面发现并不行,就一直没管了。

直到某次实验室学弟说我reconfigure又把clone那里显示的域名弄乱了,并给了我一个配置教程之后,才发现似乎是在另一个地方可以完成配置。

要修改的是/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml文件,这是每次reconfigure完GitLab后自动生成的配置文件。修改文件中email_from键值对的内容即可,对应的就是收信时显示的发信人地址;而修改host则可以更改网页中显示git clone时的仓库地址。然后sudo gitlab-ctl restart使得配置生效即可。

顺便提醒,每次reconfigure完之后,gitlab.yml的自定义内容会被重置,需要手动重新配置。

参见 https://www.cnblogs.com/miaocbin/p/13038601.html

相比于用C++写Qt,PyQt更加适合小项目入手,在单文件/单窗口的情况下更容易入手。

静态加载.ui文件需要使用pyuic5进行编译,然后作为库引入,使用一个类去继承该类即可使用。在这个类中,组件可以通过使用ui中指定的objectName直接进行获取,类似于Android中的findViewById

接下来是一些坑:

  1. 组件具有线程绑定性,只能在主线程内更新组件(包括设置组件内容),否则好的情况抛出Exception,坏的情况直接Segmentation Fault退出了,此时只能通过Qt的信号/槽机制来;
  2. 即便是新建QMessageBox也最好在主线程中进行(同样是信号/槽机制),否则可能可以展示信息,但是会出一些奇奇怪怪的错误,我这里遇到的情况就有诸如包含空格就段错误的情景。