Итак куда мы без Qt - никуда. Изначально наш код программ использовал библиотеки Qt и работали мы в Qt Creator.
Но не Qt-ом единым жив программист. Например куда мы без openssl, он никогда не являлся частью Qt (хотя и был интегрирован) или например boost. То есть все равно мы подключали извне еще какой-то функционал. К тому же мы постоянно дописывали свое развитие Qt (да и такое приходится делать, ибо Qt не панацея).
В общем к интеграции в VS Code нас подтолкнул CMake, потому что qmake ушел и ничего нового своего Qt не придумал.
И тут мы начинаем предполагать, что подготовитель сборки CMake это бесплатный открытый и популярный вариант. И если от него плясать, то нам пофигу какая среда разработки используется, главное чтобы инструмент был по фен шую:
1. Отладка нужна конечно же;
2. Удобный редактор с автозаполнением желательно, подсказками, навигацией, переходом на источник объявления и т.д.
3. Удобная интеграция разных источников открытого (и не очень) кода в свой единый проект;
И вот тут почему-бы не попробовать VS Code как среду (она вроде еще бесплатная).
Qt и VS Code
Сборку с++ проекта в VS Code с использованием библиотек Qt не трудно оказалось организовать через CMake. Здесь пример начальной отладки минимального с++ проекта.
Для использования Qt просто нужно добавить несколько команд в CMakeLists.txt:
find_package(Qt5 COMPONENTS Core REQUIRED)
#find_package(Qt5 COMPONENTS Widgets REQUIRED)
#find_package(Qt5 COMPONENTS Widgets REQUIRED)
message("QT4_INSTALLED : " ${QT4_INSTALLED} ) # working
message("QT_LIBRARIES : " ${QT_LIBRARIES} )
message("Qt5Widgets_LIBRARIES : " ${Qt5Widgets_LIBRARIES} )
message("Qt_lib : " ${Qt_lib})
#message("Qt5Core_INCLUDE_DIRS : " ${Qt5Core_INCLUDE_DIRS} )
foreach(path ${Qt5Core_INCLUDE_DIRS})
message("Qt5Core_INCLUDE_DIRS: " ${path})
endforeach(path)
foreach(path ${Qt5Gui_INCLUDE_DIRS})
message("Qt5Gui_INCLUDE_DIRS: " ${path})
endforeach(path)
#message("Qt5Widgets_DIR : " ${Qt5Widgets_DIR} )
message("Qt5Core_DIR : " ${Qt5Core_DIR} )
add_executable(test1 main.cpp)
target_link_libraries(test1 Qt5::Core)
message(STATUS ${QT_CORE_FOUND})
message("CMAKE_INSTALL_LIBDIR:" ${CMAKE_INSTALL_LIBDIR})
message("CMAKE_INSTALL_BINDIR:" ${CMAKE_INSTALL_BINDIR})
install(TARGETS test1
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
В общем сборка происходит нормально, вот маленький проект:
#include <QtCore/QCoreApplication>
#include <iostream>
#include <QDebug>
#include <QEvent>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int ii =123;
std::string str ="std string 123";
std::cout << "0 string" << std::endl;
std::cout << "1 string" << std::endl;
qDebug() << "*************************************************";
qDebug() << "------------------------------------------------------";
qDebug() << " work ";
qDebug() << "------------------------------------------------------";
qDebug() << "*************************************************";
return a.exec();
//return 0;
}
Но вот отладка не хочет работать именно при использовании кода Qt.
Qt Tools
Для начала можно попробовать установить расширение Qt Tools. В нашем случае это сразу помогло и отладка, в том числе и с кодом Qt пошла нормально.
Вот это расширение:

Старая как мир windows - проблема
Конечно среда разработки запускает наш test1.exe в каталоге Debug (да кстати у нас дебажная сборка) и test1.exe не видит библиотеку QtCore5.dll и тупо вылетает к сожалению без информации об какой-бы то ни было ошибке.
Но мы люди опытные и подкидываем QtCore5.dll в каталог Debug и "о чудо" - отладка начинает работать.
Таким образом надо как-то сообщить среде VS Code, чтобы она запускала test1.exe в среде исполнения с путями к библам Qt. Qt Creator это кстати делает автоматом.
Как все банально в Windows - все должно через переменную PATH находится: библиотеки, разные утилиты и фин еще знает что. Иначе ваша программа может чего-то не подключить и вылет к чертям собачим.
В самой программульке test1.exe выводим переменную PATH через qEnvironmentVariable("PATH") и видим что никто нам пути к библам QT не установил:
"C:\\Program Files\\Common Files\\Oracle\\Java\\javapath"
"C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath"
"C:\\Users\\p\\AppData\\Roaming\\ActiveState\\bin"
"C:\\Python27\\"
"C:\\Python27\\Scripts"
"C:\\WINDOWS\\system32"
"C:\\WINDOWS"
"C:\\WINDOWS\\System32\\Wbem"
"C:\\ProgramData\\chocolatey\\bin"
"D:\\PROG\\Strawberry\\c\\bin"
"D:\\PROG\\Strawberry\\perl\\site\\bin"
"D:\\PROG\\Strawberry\\perl\\bin"
"C:\\WINDOWS\\system32"
"C:\\WINDOWS"
"C:\\WINDOWS\\System32\\Wbem"
"C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\"
"C:\\WINDOWS\\System32\\OpenSSH\\"
"C:\\Program Files (x86)\\Common Files\\Acronis\\SnapAPI\\"
"C:\\Program Files\\PuTTY\\"
"C:\\Program Files (x86)\\Microsoft SQL Server\\100\\Tools\\Binn\\"
"C:\\Program Files\\Microsoft SQL Server\\100\\Tools\\Binn\\"
"C:\\Program Files\\Microsoft SQL Server\\100\\DTS\\Binn\\"
"C:\\Program Files (x86)\\INPAS\\DualConnector\\"
"D:\\MinGW\\bin"
"D:\\MinGW\\msys\\1.0\\bin"
"C:\\Program Files\\Git\\cmd"
"C:\\Program Files (x86)\\Windows Kits\\10\\Windows Performance Toolkit\\"
"C:\\Program Files\\Microsoft SQL Server\\110\\Tools\\Binn\\"
"C:\\Program Files\\CMake\\bin"
"C:\\Program Files (x86)\\GNU Tools Arm Embedded\\9 2019-q4-major\\bin"
"C:\\Users\\p\\AppData\\Local\\Microsoft\\WindowsApps"
"C:\\Users\\p\\AppData\\Local\\GitHubDesktop\\bin"
"C:\\Users\\p\\AppData\\Local\\Microsoft\\WindowsApps"
"C:\\xampp\\php"
"C:\\VSCode\\bin"
"C:\\Program Files (x86)\\CMake\\bin"
Как изменить значение PATH для среды выполнения вашей программы
В файле launch.json добавляем для ветки запуска программы:
"env": {
"Path": "${env:Path};G:\\QT\\Qt5.15.14-Windows-x86_64-VS2019\\bin"
},
В самом CMake нельзя установить переменную в PATH, так как он сам вызывается из среды разработки, то есть среда разработки вызывает cmake для подготовки сборки и изменить PATH родителя CMake не может естественно. Потом среда разработки VS Code настраивает среду запуска программы через launch.json. В общем есть один вариант и хватит этого.
Что работает уже с Qt на данном этапе
Таким образом отладка работает нормально (с кодом Qt).
Ошибки в коде с Qt командами подсвечиваются нормально, но только после сборки. Если все хорошо не подсвечиваются. Возможно это связано с установленными lint расширениями или cppchecker трудно разобраться...
Чего еще не работает
Навигация по коду не работает, то есть нельзя перейти на файл определения какой-то сущности по F2 например (как в Qt).
Подсказки для наборе кода
Речь от тем как заставить редактор помогать при наборе команд, директив и т.д.
Примечание: cppchecker что-то начинает подсказывать, но это не то что нам нужно.
Вообще говоря похоже это называется auto completer. Находим первый попавшийся под руку cpp-include-complete и он уже начинает что-то подсказывать после #include ...

Не так хорошо как в Qt Creator работает , но лучше чем ничего:
