用VS Code编写QT代码

VS Code越来越好用了,CMake和C++的支持都很完善。下面的文字记录了怎样用VS Code来作为IDE写C++ Qt项目的代码。

假设QT装在C:/Qt/Pre/5.10.1/msvc2017_64这里,项目名为hello.pro (pro文件可以用QT Creator生成)

C++智能提示配置:c_cpp_properties.json

在VSCODE里如果找不到头文件,会有波浪线边上还有个小灯泡,点之就会打开c_cpp_properties.json文件

在win32组内的includePath和browse都加上QT路径:

1
2
3
4
5
"C:/Qt/Pre/5.10.1/msvc2017_64/include",
"C:/Qt/Pre/5.10.1/msvc2017_64/include/QtCore",
"C:/Qt/Pre/5.10.1/msvc2017_64/include/QtGui",
"C:/Qt/Pre/5.10.1/msvc2017_64/include/QtWidgets",
"${workspaceFolder}/tmp"

编译配置:task.json

快捷键CTRL+SHIFT+B,如果没配置会提示配置生成任务,然后就会打开task.json文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
{
"version": "2.0.0",
"tasks": [
{
"label": "qmake",
"type": "shell",
"command": "qmake",
"args": ["hello.pro", "UI_DIR=tmp", "MOC_DIR=tmp"],
"options": {
"cwd": "${workspaceRoot}",
"env": {
"PATH":"C:/Qt/Pre/5.10.1/msvc2017_64/bin"
}
},
"group": "build",
"presentation": {
"reveal": "always"
}
},
{
"label": "build",
"type": "shell",
"command": "nmake",
"args": ["debug"],
"options": {
"cwd": "${workspaceRoot}",
"env": {
"PATH":"C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/bin/HostX64/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/VC/VCPackages;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TestWindow;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/MSBuild/15.0/bin/Roslyn;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Team Tools/Performance Tools/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Team Tools/Performance Tools;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools//x64;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools/;C:/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.6.1 Tools/x64/;C:/Program Files (x86)/HTML Help Workshop;C:/Program Files (x86)/Windows Kits/10/bin/x64;C:/Program Files (x86)/Windows Kits/10/bin/10.0.16299.0/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/MSBuild/15.0/bin",
"INCLUDE":"C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/ATLMFC/include;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/include;C:/Program Files (x86)/Windows Kits/NETFXSDK/4.6.1/include/um;C:/Program Files (x86)/Windows Kits/10/include/10.0.16299.0/ucrt;C:/Program Files (x86)/Windows Kits/10/include/10.0.16299.0/shared;C:/Program Files (x86)/Windows Kits/10/include/10.0.16299.0/um;C:/Program Files (x86)/Windows Kits/10/include/10.0.16299.0/winrt;",
"LIB":"C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/ATLMFC/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/lib/x64;C:/Program Files (x86)/Windows Kits/NETFXSDK/4.6.1/lib/um/x64;C:/Program Files (x86)/Windows Kits/10/lib/10.0.16299.0/ucrt/x64;C:/Program Files (x86)/Windows Kits/10/lib/10.0.16299.0/um/x64;",
"LIBPATH":"C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/ATLMFC/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/lib/x86/store/references;C:/Program Files (x86)/Windows Kits/10/UnionMetadata/10.0.16299.0;C:/Program Files (x86)/Windows Kits/10/References/10.0.16299.0;C:/WINDOWS/Microsoft.NET/Framework64/v4.0.30319;"
}
},
"group": "build",
"presentation": {
"reveal": "silent"
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceRoot}"],
"pattern": {
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error) (\\w*:\\s+.*)$",
"file": 1,
"line": 2,
"severity": 3,
"message": 4
}
}
},
{
"label": "clean",
"type": "shell",
"command": "nmake",
"args": ["clean"],
"options": {
"cwd": "${workspaceRoot}",
"env": {
"PATH":"C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.12.25827/bin/HostX64/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/VC/VCPackages;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TestWindow;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/MSBuild/15.0/bin/Roslyn;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Team Tools/Performance Tools/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/Team Tools/Performance Tools;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools//x64;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools/;C:/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.6.1 Tools/x64/;C:/Program Files (x86)/HTML Help Workshop;C:/Program Files (x86)/Windows Kits/10/bin/x64;C:/Program Files (x86)/Windows Kits/10/bin/10.0.16299.0/x64;C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/MSBuild/15.0/bin",
}
},
"group": "build",
"presentation": {
"reveal": "always"
}
},
]
}

注意

  • options.env内的变量依据你的QT和VS安装路径修改。关于nmake的环境参数可以进入“VC运行时命令行环境”再输入SET命令,从里面抄出来。
  • 注意反斜杠方向
  • 使用默认提供的"problemMatcher": "$msCompile"文件定位会有问题,自己写灵活一点。(见已知问题)

调试配置:launch.json

点左边的调试按钮进入调试界面(CTRL+SHIFT+D),点击配置按钮就可以打开launch.json文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"version": "0.2.0",
"configurations": [
{
"name": "(Windows) Launch",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/debug/hello.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/debug",
"environment": [{"name":"PATH", "value":"C:/Qt/Pre/5.10.1/msvc2017_64/bin"}],
"externalConsole": true
}
]
}

搞定

已知问题

  • 一些编译信息点击不能正确定位到文件
    • problemMatcher设置编译信息提取器,其中的fileLocation可以设置为["absolute"]["relative", "相对路径"]
    • 问题是编译信息提供的文件名大多数是相对路径,但有时提示库文件问题时用的是绝对路径。而fileLocation只能设置一种。
    • "problemMatcher": "$msCompile"用的是绝对路径,显然自定义提取器指定"fileLocation": ["absolute"]更合理。