使用VS2010编译Qt4项目,编译提示找不到ui_xxxxx.h,显然是xxxxx. ui文件没能正常编译。
网上说需要转换一下工程类型,转换为Qt工程:
但是我试过了不行,只得在文件的属性里面增加自定义生成工具,右键xxxxx. ui文件:
然后在自定义生成工具中添加Qt的编译命令:
命令行:
"D:\Qt\4.8.5\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"
输出:
.\GeneratedFiles\ui_%(Filename).h;%(Outputs)
附加依赖项:
D:\Qt\4.8.5\bin\uic.exe;%(AdditionalInputs)
这是ui文件的自定义生成命令,如果是Qt类的.h文件:
命令行:
"D:\Qt\4.8.5\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB "-I.\GeneratedFiles" "-I." "-ID:\Qt\4.8.5\include" "-I.\GeneratedFiles\$(ConfigurationName)\." "-ID:\Qt\4.8.5\include\QtCore" "-ID:\Qt\4.8.5\include\QtGui" "-ID:\Qt\4.8.5\include\QtWidgets"
输出:
.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
附加依赖项:
D:\Qt\4.8.5\bin\moc.exe;%(FullPath)
其实这些自定义命令应该是Qt插件为我们生成好的,不知什么原因没有生成,只能自己动手丰衣足食。
上述更改是解决了问题,但是写法不完善,引用的Qt库都是使用的绝对路径:
假如我们版本升级了,或是换了台电脑,Qt的路径或版本变化了:
像上图,版本变为4.8.6了,再编译刚才的项目又报错了:
错误详情:
总不能换个版本改一次吧。其实安装Qt是有环境变量的,如果没有的话就自己添加一个:
然后把刚才填写的自定义命令用环境变量替换,在VS2010中引用环境变量要使用“$(QTDIR)”格式:
这里注意的是,VS打开Qt工程,一般会生成一个记录Qt版本的文件,名为xxx.vcxproj.user,打开其内容如下:
这里面记录的QTDIR版本还是4.8.5,而VS会优先使用这个环境变量,所以我们那样写后可能发现还是4.8.5版本,需要手动把这个文件的QTDIR改为4.8.6,之后再编译就没有问题了。
但是为每个Qt项目都得写一遍带环境变量的库引用也还是挺麻烦的,我们能不能设置一个通用的属性,以后每个项目都可以使用这个配置呢?答案就在“视图->其他窗口->属性管理器”中:
在属性管理器中添加一个为Qt项目设置的通用配置:
这样以后的项目都可以添加这个属性配置,从而免去每次都配置一遍Qt的相关属性。