问题描述
分析解决过程
检查了半天跟另外一个文件的结构是一模一样的,只是类名不一样,网上找了很多方式都不行,真是让我脑热。
后面我决定使用排除法试试,发现挺得劲,一下就试出问题所在了。
如图:我注释了另外一个跟它结构一样的但没有提示错误的文件中的类引用: #include "ui_NIUBITOOL.h"
然后切到它对应的cpp文件,哦嗬!他娘的竟然马上出现了一样的问题。我心里一阵波澜,知道原因就好说好多了。
这个文件是存放在项目目录的GeneratedFile文件夹里的,进去目录发现确实没有ui_CONNECTCFG.h文件,然后我找了个方法在VS2015中右键这个ui文件编译了一个
发现还是不行,当时我就气炸了,有点想放弃直接使用Qt Creator重新搞,后来冷静地想想,还是搞搞,解决了顺带多一篇博客,反正我在这上面没找到方法。
再次对比了一下跟没有问题的那个界面的差异,发现缺少的文件中的内容只需要修改个类名就可以了,把它们复制出来重新命名,将里面的类名全部更改为CONNECTCFG,文件分别是CONNECTCFG.qrc、qrc_CONNECTCFG.cpp两个文件。如下两个截图位置:
搞完之后,还是不行!我懵逼了!全都一样了啊!
好吧三分钟之后我又冷静了,还有一个一定不一样的文件但它们结构绝对一样的,直接对比两个ui开头的头文件结构。打开之后我震惊了,我在cpp文件里引用的是"ui_CONNECTCFG.h"
,ui_CONNECTCFG.h文件里class 的是竟然是Form,为毛?
打开设计界面之后发现,果然!这个对象名竟然不会自己生成跟我命名的文件一样
然后修改对象名之后保存,在VS2015重新编译一下ui_CONNECTCFG.u文件,再回到目录检查生成ui文件类名是否正确。
搞了这么多事情,重新生成以下解决方案,最后解决问题,编译通过。
总结
最后整理了一下步骤其实很简单,就是读不到那个ui_xxx.h文件:
1.新增ui_xxxx.h界面文件后,确认你要引用类名,它默认生成是Form,修改对象名文件同名xxx保存(其实默认Form也没问题,但是引用的时候需要#include “ui_Form.h”,不推荐)
2.在VS2015解决方案视图右键新添加的ui_xxx.h文件>>选择编译
3.检查项目目录/GeneratedFile文件夹下是否生成ui_xxx.h文件并打开检查类名是否跟引用的、Qt设计界面的对象名一致,三个地方都一致的话在VS2015菜单>>生成>>重新生成解决方案就ok了。
实在还不行按照截图的傻瓜式操作肯定可以。
归根问题就是引用的类不对,往这个方向查问题。
知识还不够丰富,如果完全了解这个东西,大可不必多费周章。