【题外话开始】
哈哈,刚用知乎写一些小文章,大佬看到有误的地方还请斧正。em,这几天为了更好学习Unreal底层去学了DirectX后来为了方便学习又用了Qt来做图形界面。。毕竟QT编码风格轻松简单还跨平台,对于我这样的小白来说还是很友好的,不需要各种初始化一大堆,上来就用。
em,因为我学的时候网上资料有点散乱,踩了各种花式坑,简单的创建DirectX上下文搞了3天。。(大佬别笑我_(:з)∠)_)这篇主要整理记录下怎么在QT中配置使用directX的窗口,还有一些踩的坑
【题外话结束】
【正题开始】
首先,要使用DirectX11需要去官网下载相应的SDK,下载地址如下
Download DirectX Software Development Kit from Official Microsoft Download Centerwww.microsoft.com然后一键安装就行,我已经下好了,一路yes,下一步,点击安装即可
然后第一个神奇的坑就出来了(PS:如果只是为了使用directX的话,这一步可以跳过,无视报错!我是后来才知道的_(:з)∠)_,无视报错也没关系,因为我们只要个Lib文件,不过你要是强迫症可以解决一下,解决方案如下),才第一步就有坑,真的对小白不友好呢
然后谷歌上搜了一下,发现原因是计算机上有安装过别的版本的Microsoft Visual C++ 2010 Redistributable,我这个版本的SDK需要的是:Microsoft Visual C++ 2010 x86 Redistributable - 1010.0.30319 所以别的版本都要卸载干净。
但是卸载这些东西会导致VS编译出错!所以没事最好别卸载,小心重装VS。
卸载干净重新安装 SDK ,就可以成功了(亲测有效,这个坑踩爆了,我还重装了VS,哎)
这只是强迫症解决报错,如果只为了Qt使用DirectX的话,大家可以无视这个烦人的S1023,直接在 C:Program Files (x86)Microsoft DirectX SDK (June 2010)Libx64 目录下 拿到 d3d11.lib 和 d3dcompiler.lib(这个库是用来读取编译shader文件的)
然后就可以在 项目的 *.pro文件中写入包含LIB的路径 ,我的路径如下:
这步有个坑,就是不要直接使用C:Program Files (x86)Microsoft DirectX SDK (June 2010)Libx64 这个路径,因为这个路径里有空格这种特殊符号,会报错哟_(:з)∠)_
还有注意下QT的路径中是/斜杠,如果直接复制路径斜杠是这个,会报错哦
简单解释下Qt奇怪的路径包含机制吧:
LIBS += -L(这里写你的Lib所在路径) -l(这里写你的lib名称,小心别写.lib哟) (加这个表示多行包含,下面还有个lib要包含)
图中的$$PWD是代表了当前的路径,../是上级目录的意思
然后生成吧,这里注意下,最好把之前生成的文件手动全部删除,或者先点qmake再点击构建,才能保证各项更新,不然会有问题。个人比较喜欢直接手动删掉上次生成的文件,也是最保险的
然后直接在你需要使用directX的地方直接包含这两个头文件,就行
注意下,这里不需要再Qt里包含SDK里面的文件,因为qt自带了这两个头文件,如果你
include了C:Program Files (x86)Microsoft DirectX SDK (June 2010)Include这个下面的头文件会报重复定义的错滴O(-_0)
然后恭喜大家就可以在QWidget中使用各种API啦,当然还需要配置directX上下文到QWidget中,这个我会在下一篇专栏文章中介绍,如何用QWidget绘制DirectX
希望QT编译快点的话可以在 构建设置里配置多核编译 加上 -j 4 (4核编译) 核桃多点的话就可以把数字加大点_(:з)∠)_ 就行如下图
【正题结束】
【闲话开始】
下一章会记录下,如何用QT中的QWidget窗口进行DirectX11的绘制,简单画个三角形粗来
如有错误请大佬斧正,希望文章能帮大家少踩坑~
【闲话结束】
原创文章