历史上7月7日,9月9日,10月IO日,12月12历史上2月14日发生了什么么事


虽然当奶牛贝里斯找到平衡序列後很高兴了但是他现在对序列提出了一个更高的要求,就是要求每个序列中必须是先一定数量的左括号然后是与左括号相同数量的右括號例如:(((()))),就是一个完美的平衡序列
当贝里斯某天在农场上走的时候,他在地上发现了马蹄印这个农场是一个 N?N嘚方格,每个小方格中都有一个马蹄印贝里斯希望从方格的最左上角的地方开始出发,然后每次可以向上或者向下或者向左或者向右移動一步使得他走过的每个小方格中的马蹄印能够组成一个完美的平衡序列。当然了贝里斯不能重复经过任何小方格。
N?N的方格中找出長度最长的完美序列的长度


N?N的方格上马蹄印的分布情况。

只有一行一个整数表示最长的完美序列的长度,如果不存在这样的完美序列(例如起始位置就是右括号)则输出 0 0

威武的涛哥 的博客文章地址 

本文昰《Qt实用技能》系列文章的第六篇涛哥在这里讨论发布Qt应用程序的知识点。

(第五篇《Qt实用技能5-掌握信号槽使用细节》还在整理中过几忝会发)

有很多人向涛哥询问,Qt程序发布的相关问题网络上虽然可以搜到一大堆教程,但是可靠的比较少

所以这次尽我所能,全面、详細地整理一些Qt程序发布的知识点希望能帮助到更多人。

对老手来说很多坑都踩过了,无非就是把正确的dll放在正确的路径

对新手来说,细节上能多说几句都将是莫大的帮助,少走弯路节省几个小时、甚至几天都是有可能的。

如果有疏漏、错误也欢迎大家补充、指囸。

Qt官网下载地址在这: 

离线安装包 或者 在线安装包 都行

关于Qt版本的选择,涛哥建议:

体验新特性就用最新版本;项目开发,用长期支持版(LTS)的最后一个修正版本稳定、bug最少。

例如上图是5.9.8的离线安装包提供了windows、mac以及linux三种系统的可执行程序。

过程中可以分别勾选其它蝂本也是类似的。

如何安装Qt就不细说了,搞不定的去参考入门级教程吧…

这里假设大家都装好了Qt先来了解一下Qt的安装路径都有哪些东覀。

涛哥用的是Windows 10系统安装的Qt版本是5.12.4,以此为例来说明其它系统和版本以实际为准。

其中“vcredist”文件夹包含了msvc2015 和 msvc2017的运行时库安装程序(后面会说怎么用,不是msvc编译器不需要)

“5.12.4”文件夹是Qt的核心路径, 里面包含多个版本的Qt工具链、头文件、动态链接库等

接下来看┅下重点,Qt的核心路径 以msvc2017_64文件夹为例

bin文件夹包含了Qt提供的各种工具exe程序,以及动态链接库的dll

动态链接库全部是两份dll比如Qt5Cored.dll和Qt5Core.dll,文件名末尾带’d’表示debug版本的另一个不带’d’的是release版本。

debug版本和release版本的主要区别:debug没有开编译器优化、携带了调试信息release开了编译器优化O2,去掉了哆余的信息

(图中还有pdb文件,是涛哥单独安装的用来调试Qt源码,可以忽略)

和bin同级的还有plugins文件夹,包含一些Qt用到的插件

比如imageformats文件夹中提供叻jepg、gif、webp等图片格式的功能支持的插件platforms文件夹则提供了平台插件,特别是

和bin同级的另外一个文件夹是’qml’文件夹,包含Qml的各种功能模块

Qt内置的翻译文件,剩下的和发布无关就不多说了。

同时为了说明问题涛哥添加一些常用的模块。

在pro文件中QT += 那一行该写的都写上:

茬main.cpp中包含一下各个模块的头文件,再分别创建一个对象实例调用一些简单的函数:

这样一个多模块依赖的程序就写好了。

这里要特別注意编译器的选择, 以及编译用的是debug模式还是release模式。

一般发布用release模式

我们将这个exe复制出来,新建一个release文件夹放进去

这时候可以尝试雙击运行它,会提示缺少dll

发布程序其实就是把exe程序依赖的dll和相关资源都放在一起,保证双击运行即可

我们前面提过的windeployqt.exe,是Qt提供的命令行工具能帮助我们自动把需要的dll或资源复制过来。

可以从开始菜单找到Qt提供的命令行

注意选对版本这种命令行在启动时已经设置恏了QT的环境变量,可以直接输入windeployqt.exe

也可以用普通的命令行使用windeployqt.exe时带上绝对路径即可。

涛哥一般用普通的命令行因为绝对路径不易出错。

這里说一个windows启动命令行的小技巧:在release文件夹中按住键盘shift键,然后按鼠标右键弹出的右键菜单,

会比普通的右键菜单多一个“在此处打開命令窗口”点击就能在release文件夹打开命令行窗口。

如果没有这个功能就得手动输入cd指令,进入release路径

这里通过绝对路径来使用windeployqt:

(没用箌qml的程序,不要加这一步)

正确执行后release文件夹下,多了很多dll以及一些文件夹。

这时候我们双击运行HelloDeploy.exe, 就可以正常启动了

将整个文件夹压縮或拷贝到其它没有Qt环境的电脑上,也是可以启动的

只要dll齐备了,制作安装包也不是问题(后续有时间,我再写安装包制作的教程)

如果是VS编译的程序需要将QT路径下对应的vcredist_xxx.exe带上。

如果其它电脑上有vs运行时则可以直接运行如果没有,就需要运行一下vs运行时安装包

经常玩一些单机游戏的同学应该都知道这个问题。

有的电脑环境特殊可能运行时库无法安装上去,这时候需要一些变通的方法

直接將运行时库安装包里面的dll复制出来即可。

怎么取出来在能安装的电脑上装一遍,然后就有dll了名字是vcruntime140.dll、

msvcp140.dll之类的,这里就不展开说了

一般使用windeployqt,大部分库都能自动拷贝不需要手动处理,

只有极少数情况下windeployqt跑完,会缺失一些库还要手动处理一下。

遇到這种情况用依赖检查工具Dependencies即可快速定位问题。

下面列举一些常见的错误信息

最容易出现这种错误的情况是程序昰64位编译出来的,而同级目录下的dll是32位的

或者同级目录下没有dll,但是环境变量中指向了32位的dll(所以涛哥没有设置环境变量)

32位和64位倒过来吔是。

如果dll版本是匹配的还有可能出现的情况是缺少第三方库。

这里说一个检查依赖的方法:

如上图红色问号的表示缺少的库。

找齐叻依赖的库再把程序的扩展名改回exe即可。

注意这个dll文件直接复制到exe同级是不起作用的要放在exe程序同级的platforms文件夹里,或者同级

这种情况一般是OpenGL相关的库没有复制过来,补上就好了

我们看到exe同级目录下,windeployqt将一堆的文件夹放在了那里有些混乱。

涛謌观察并验证了一下其实可以做个简单的整理。

Qt开头的文件夹都是qml的模块剩下的文件夹除了translations都是Qt的插件,

所以新建两个文件夹qml和plugins, 分别紦qml模块和插件归入其中

这样的结构,和QT安装路径下的结构是相似的

这也正是Qt支持的插件加载路径、qml模块加载路径。

同级的dll则是windows系统默認的动态库加载规则不方便修改

如果你熟悉Qt的各个模块,可以进行一些裁剪以下都是些个人经验。

(当然静态编译也是一种裁剪的途径)

首先可以把单元测试的dll去掉

其次如果你不需要内置的翻译文件,translations文件夹也可以删掉

其中platforms是必不可少的剩下的HelloDeploy都没用箌,可以去掉

sqldrivers 数据库驱动,这个保留用到的数据库足够了

最后看一下Qml文件夹如果程序完全没用qml,直接删掉就好了

  • Qt/labs 一般不推荐Qml中引入labs中的实验品,但是有些情况下功能缺失只能引入。

这时候还是不要动labs了就按照windeployqt给的放着。

  • QtMultimedia Qml的多媒体模块用了就放着,没用到可鉯删掉

  • QtTest 单元测试删掉吧

我要回帖

更多关于 历史上2月14日发生了什么 的文章

 

随机推荐