在 VS2015 中使用 Qt4

Qt4 对 Visual Studio 的支持止于 VS20101,也就是说你想要在 VS2015 使用 qt4,只能自己编译。而自己编译也是极其麻烦的,许多地方需要考虑 VS2015 所使用的编译器支持的标准,要处理许多代码的冲突。所以网上根本找不到 VS2015 + qt4 的解决方案。

但我很喜欢 VS2015,不要钱的 Community 版本十分好使(再也不用盗版 VS2010、番茄助手了)!它自带的代码提示、补全很完善很赞。而且终于有了我以前吐槽过的 VS 没有的【切换头文件/源文件的功能】,见 愚蠢的 Visual Studio2 而且我现在也没时间把原来的代码迁移到 qt5(我也不知道这工作量有多大)。所以我想,要是能在 VS2015 里使用 qt4,那该多好啊。

于是我搜到了 sandym/qt-patches: Patches to some release versioin of Qt I use,这人提供了 qt4 的补丁(patch),这样就能用 VS2015 编译 qt4 源码,生成必要的 *.lib*.dll 文件了。

这样,我编译了 VS2015 能用的 qt4。

跑起来

这是一个精简了的 vs2015 能用的 qt4 打包:http://whudoc.qiniudn.com/2016/vs2015-qt4-playground.zip。虽然只有 14 MB,使用它你可以编译运行大多数 qt4 工程代码。

这个打包里还包含一个 qt 样例程序,很容易运行起来。

使用方法如下:

  1. 解压 vs2015-qt4-playground.zip
  2. 解压里面的 qt4-vs2015x64.7z
  3. 把里面的 qt4-vs2015x64\bin 目录的完整路径拷贝,粘贴到系统变量 PATH 的前面;
  4. 用 cmake 编译 vs2015 工程(选择 Visual Studio 14 VS2015 WIN64);
  5. 用 vs2015 打开工程,编译 release 版本程序,然后运行。

为了让这个 build 很小,我去掉了 debug 的部分,所以只能编译 release。而且有些模块被我去掉了。(比如 qt-libjpeg,所以连 jpeg 格式的图片都无法加载。)

获取一个更完整的 build

我还编译了其它几个不同的 qt4 vs2015x64 build。比如这个: qt-4.8.7-vs2015-build1.7z,压缩包 108 MB,解压后 951 MB。跟上面的配置方法一样。

编译自己的 build

或许你想要更完整的支持,或许你想要更小的发行版。总之你想自己编译,可以参考我的 district10/qt4-vs2015x64: Qt4 & Visual Studio 2015 (vc14).。里面有源码下载,以及 build 的步骤。

题外话

Qt5 有官方的 VS2015 的二进制发行,使用起来也很简单。 Qt5 和 CMake 一起使用也很容易,只要在 CMakeLists.txt 里加上搜索路径即可,比如“C:/Qt/VS2015x64/Qt5.6.0/5.6/msvc2015_64”,具体可以看我的 qt5-project

Qt4 和 Qt5 也不会冲突。

qt4 + vs2015,代码:https://github.com/district10/cmake-templates/tree/master/qt4-project

qt4 + vs2015,代码:https://github.com/district10/cmake-templates/tree/master/qt4-project

qt5 + vs2015,代码:https://github.com/district10/cmake-templates/tree/master/qt5-project

qt5 + vs2015,代码:https://github.com/district10/cmake-templates/tree/master/qt5-project


  1. Qt 官方的 release 里,只有对 vs2008 和 vs2010 的支持。Qt4 最后一个 release 是 qt-4.8.7,那时候 vs2015 还没出来吧。

  2. 而且,怎么说呢,VS 原本没有这个功能是可以理解的。因为头文件的声明和 cpp 的实现本来就可以是随意的。以我 camke-templates 里的 functions.h 为例,它的实现就分布在 cubic.c、square.c、power4.c、power5.c。这样的情况下,Qt creator 那个【切换头文件/源文件(F4)】其实是不严谨的。而 VS 的【Go to Definition(F12)】则很“正确”。

    现在 VS2015 有了【Toggle Header / Code File(Ctrl+K,Ctrl+O)】,这个表达是极为严谨且精准的。

    (我以为 VS2015 真的可以“智能”地跳转,结果发现居然这功能居然没反应。不知道是不是自己的电脑太慢,或者是设置得不对。就我这样?)