qt选择的版本,是qt最后一个,支持完全离线安装的版本,5.14.2,需要注意的是,安装的时候,需要断网安装,才可以跳过,用户登录的步骤; ![[Pasted image 20240801182425.png]] unity选择的版本,是2019.3.0 ![[Pasted image 20240801182626.png]] 首先,打开qt,如果要设置暗色模式,参考[[Qt暗色模式]]即可; 需要注意的是,如果后期涉及到,复制依赖库相关的,qt工程的路径,不可以太深,不然会出现预期之外的问题; 这里创建新工程,建议只存在,三层子目录的qt工程,举例说明,在`G:\code\mine\`目录创建即可; 打开qt,开始创建新工程 ![[Pasted image 20240801182933.png]] 选择动态库文件; ![[Pasted image 20240801183006.png]] 继续 ![[Pasted image 20240803152751.png]] ![[Pasted image 20240801183047.png]] ![[Pasted image 20240801183104.png]] ![[Pasted image 20240801183115.png]] 选择,在安装时候,勾选的MinGW64位编译即可; ![[Pasted image 20240801183133.png]] ![[Pasted image 20240803155344.png]] 先把一个`QtWinMigrate`相关的qt pri工程,拷贝到,根目录的同级目录,具体内容,参考[[QtWinMigrate]]即可; ![[Pasted image 20240803152842.png]] 打开qt的pro文件,先修改C++的编译配置版本 ![[Pasted image 20240801183834.png]] 然后,设置编译路径,分别是Output目录下的release或者debug路径,分别对应不同的编译类型; ![[Pasted image 20240801184135.png]] 当下的,选择Release即可; ![[Pasted image 20240801184237.png]] 通过这种形式,可以调用,外部的pri配置文件 ![[Pasted image 20240801184318.png]] 添加,保存修改后,等待编译完成,可以看到,对应的pri工程,就已经被加入进来了,后续如果是ui相关的,也可以通过这种形式,解耦; ![[Pasted image 20240801184541.png]] 右键,选择添加; ![[Pasted image 20240801184913.png]] 加一个核心的C++类相关,命名为`Core`; ![[Pasted image 20240801184943.png]] ![[Pasted image 20240803152944.png]] ![[Pasted image 20240803153024.png]] 头文件,include引用,相关的,其他头文件; 然后,调用了MFC相关的QWinWidget类,还有声明一个Callback回调,后续用于跟Unity的通信和交互; 设置Core继承自,QObject类,再整一个instance单例模式; 而Core的构造函数,设置为private私有,而且禁用隐式转换,参考[[QT中的explicit关键字的作用]]; ![[Pasted image 20240801185836.png]] 对应修改一下cpp文件,对于构造函数的调用 ![[Pasted image 20240801190447.png]] 回到.h头文件,整一个KitApi枚举,其中先包含俩元素,用于初始化和退出SDK相关; ![[Pasted image 20240801195958.png]] 在头文件中,声明了几个,需要使用到的,私有变量; 其中m_callbackMap是用于,存储和调用,由unity传递过来的,函数功能回调,参考[[QMap使用详解]]即可; 后续几个私有变量,都是跟windows窗体有关,在这里,就是unity应用程序,对应的窗体,参考[[qt HANDLE]]和[[qt HWND]]和[[WNDPROC]]即可; ![[Pasted image 20240801200701.png]] 然后,再声明几个,对应的私有函数; init是sdk初始化相关; result是用于,回调相关,是发消息回unity客户端的; instanceCount是用于初始化,实例化qt sdk数量的设定; initHWND是用于,初始化unity窗口相关信息; ![[Pasted image 20240801201829.png]] 再声明几个,公有函数,分别是用于,获取窗口标题,成功&失败回调,函数触发invoke,sdk退出的quit,打印的print; 还有对应的callback回调getCallback,剩下的,也是跟unity窗体相关; ![[Pasted image 20240801202406.png]] 在头文件,再弄俩信号,分别是用于,后续窗体遮罩相关 ![[Pasted image 20240801203335.png]]