Content is user-generated and unverified.

Claude Code Task List - VS 2015 Qt Code Editor Project (No Qt VS Tools)

Target: produce a buildable VS 2015 solution for QCodeEditor using manual moc/rcc custom build steps against Qt 5.14.2 msvc2017 x86.

Paths (constants used throughout)

  • QT_ROOT = C:\Qt\Qt5.14.2\5.14.2\msvc2017
  • QT_BIN = %QT_ROOT%\bin
  • QT_INC = %QT_ROOT%\include
  • QT_LIB = %QT_ROOT%\lib
  • SRC_ROOT = C:\Win32CodeProjects\CppUbs3win32\QCodeEditor
  • PROJ_DIR = %SRC_ROOT%\vs2015\QCodeEditor

Step 1 - Verify prerequisites

  • where cl - returns a VS 2015 cl.exe path (v140)
  • dir "%QT_BIN%\moc.exe" - exists
  • dir "%QT_BIN%\rcc.exe" - exists
  • dir "%QT_LIB%\Qt5Core.lib" - exists
  • dir "%QT_BIN%\Qt5Core.dll" - exists
  • dir "%QT_BIN%\windeployqt.exe" - exists

Step 2 - Create project tree

  • mkdir %SRC_ROOT%\vs2015\QCodeEditor
  • mkdir %PROJ_DIR%\GeneratedFiles

Step 3 - Generate the .vcxproj, .filters, and .sln files

Claude Code: write the three files in Appendices A, B, C verbatim.

Step 4 - Pre-generate moc outputs (seeds GeneratedFiles so first build succeeds)

Run once from PROJ_DIR:

set MOC="%QT_BIN%\moc.exe"
set INC_ARGS=-I"..\..\include" -I"..\..\include\internal" -I"%QT_INC%" -I"%QT_INC%\QtCore" -I"%QT_INC%\QtGui" -I"%QT_INC%\QtWidgets"

%MOC% %INC_ARGS% ..\..\include\internal\QCodeEditor.hpp              -o GeneratedFiles\moc_QCodeEditor.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QLineNumberArea.hpp          -o GeneratedFiles\moc_QLineNumberArea.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QSyntaxStyle.hpp             -o GeneratedFiles\moc_QSyntaxStyle.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QStyleSyntaxHighlighter.hpp  -o GeneratedFiles\moc_QStyleSyntaxHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QCXXHighlighter.hpp          -o GeneratedFiles\moc_QCXXHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QGLSLHighlighter.hpp         -o GeneratedFiles\moc_QGLSLHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QGLSLCompleter.hpp           -o GeneratedFiles\moc_QGLSLCompleter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QXMLHighlighter.hpp          -o GeneratedFiles\moc_QXMLHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QJSONHighlighter.hpp         -o GeneratedFiles\moc_QJSONHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QLuaHighlighter.hpp          -o GeneratedFiles\moc_QLuaHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QLuaCompleter.hpp            -o GeneratedFiles\moc_QLuaCompleter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QPythonHighlighter.hpp       -o GeneratedFiles\moc_QPythonHighlighter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QPythonCompleter.hpp         -o GeneratedFiles\moc_QPythonCompleter.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QLanguage.hpp                -o GeneratedFiles\moc_QLanguage.cpp
%MOC% %INC_ARGS% ..\..\include\internal\QFramedTextAttribute.hpp     -o GeneratedFiles\moc_QFramedTextAttribute.cpp
%MOC% %INC_ARGS% -I..\..\example\include ..\..\example\include\MainWindow.hpp -o GeneratedFiles\moc_MainWindow.cpp

"%QT_BIN%\rcc.exe" --name qcodeeditor_resources ..\..\resources\qcodeeditor_resources.qrc -o GeneratedFiles\qrc_qcodeeditor_resources.cpp

Step 5 - Build from command line

cd %PROJ_DIR%
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
msbuild QCodeEditor.vcxproj /p:Configuration=Release /p:Platform=Win32

Step 6 - Deployment

Post-build event in vcxproj runs windeployqt automatically, populating $(OutDir) with Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll, platforms\qwindows.dll.

Step 7 - Verify

  • dir %PROJ_DIR%\Release\QCodeEditor.exe - exists
  • dir %PROJ_DIR%\Release\platforms\qwindows.dll - exists
  • Launch exe - editor window opens

Key notes on SubSystem / entry point (prevents LNK2019 _WinMain@16)

The Qt example uses standard int main() but the project links as SubSystem=Windows (no console). The linker defaults to looking for WinMain() which does not exist. Fix: set <EntryPointSymbol>mainCRTStartup</EntryPointSymbol> in the Link section. This tells the linker to use the CRT's main() entry while keeping the Windows GUI subsystem (no console window). Alternative would be SubSystem=Console, but that shows an unwanted console window behind the Qt GUI. The vcxproj in Appendix A already includes this fix.


Appendix A - QCodeEditor.vcxproj

Write verbatim to %PROJ_DIR%\QCodeEditor.vcxproj.

xml
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{A1B2C3D4-E5F6-7890-ABCD-1234567890AB}</ProjectGuid>
    <RootNamespace>QCodeEditor</RootNamespace>
    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <PlatformToolset>v140</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
    <UseDebugLibraries>true</UseDebugLibraries>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <PlatformToolset>v140</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
    <UseDebugLibraries>false</UseDebugLibraries>
    <WholeProgramOptimization>true</WholeProgramOptimization>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <PropertyGroup>
    <QtDir>C:\Qt\Qt5.14.2\5.14.2\msvc2017</QtDir>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>$(ProjectDir)GeneratedFiles;$(ProjectDir)..\..\include;$(ProjectDir)..\..\include\internal;$(ProjectDir)..\..\example\include;$(QtDir)\include;$(QtDir)\include\QtCore;$(QtDir)\include\QtGui;$(QtDir)\include\QtWidgets;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <DisableSpecificWarnings>4127;4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings>
      <LanguageStandard>stdcpp14</LanguageStandard>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
      <AdditionalLibraryDirectories>$(QtDir)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
    <PostBuildEvent>
      <Command>"$(QtDir)\bin\windeployqt.exe" --no-translations --no-system-d3d-compiler "$(TargetPath)"</Command>
    </PostBuildEvent>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Link>
      <AdditionalDependencies>Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Link>
      <AdditionalDependencies>Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="..\..\src\internal\QCodeEditor.cpp" />
    <ClCompile Include="..\..\src\internal\QLineNumberArea.cpp" />
    <ClCompile Include="..\..\src\internal\QSyntaxStyle.cpp" />
    <ClCompile Include="..\..\src\internal\QStyleSyntaxHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QFramedTextAttribute.cpp" />
    <ClCompile Include="..\..\src\internal\QLanguage.cpp" />
    <ClCompile Include="..\..\src\internal\QCXXHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QGLSLHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QGLSLCompleter.cpp" />
    <ClCompile Include="..\..\src\internal\QXMLHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QJSONHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QLuaHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QLuaCompleter.cpp" />
    <ClCompile Include="..\..\src\internal\QPythonHighlighter.cpp" />
    <ClCompile Include="..\..\src\internal\QPythonCompleter.cpp" />
    <ClCompile Include="..\..\example\src\main.cpp" />
    <ClCompile Include="..\..\example\src\MainWindow.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QCodeEditor.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QLineNumberArea.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QSyntaxStyle.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QStyleSyntaxHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QCXXHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QGLSLHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QGLSLCompleter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QXMLHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QJSONHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QLuaHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QLuaCompleter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QPythonHighlighter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QPythonCompleter.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QLanguage.cpp" />
    <ClCompile Include="GeneratedFiles\moc_QFramedTextAttribute.cpp" />
    <ClCompile Include="GeneratedFiles\moc_MainWindow.cpp" />
    <ClCompile Include="GeneratedFiles\qrc_qcodeeditor_resources.cpp" />
  </ItemGroup>
  <ItemGroup>
    <CustomBuild Include="..\..\include\internal\QCodeEditor.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QLineNumberArea.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QSyntaxStyle.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QStyleSyntaxHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QCXXHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QGLSLHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QGLSLCompleter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QXMLHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QJSONHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QLuaHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QLuaCompleter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QPythonHighlighter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QPythonCompleter.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QLanguage.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\include\internal\QFramedTextAttribute.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc %(Filename).hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\example\include\MainWindow.hpp">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\moc.exe" -I"$(ProjectDir)..\..\include" -I"$(ProjectDir)..\..\include\internal" -I"$(ProjectDir)..\..\example\include" -I"$(QtDir)\include" -I"$(QtDir)\include\QtCore" -I"$(QtDir)\include\QtGui" -I"$(QtDir)\include\QtWidgets" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp;%(Outputs)</Outputs>
      <Message>moc MainWindow.hpp</Message>
    </CustomBuild>
    <CustomBuild Include="..\..\resources\qcodeeditor_resources.qrc">
      <FileType>Document</FileType>
      <Command>"$(QtDir)\bin\rcc.exe" --name qcodeeditor_resources "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\qrc_qcodeeditor_resources.cpp"</Command>
      <Outputs>$(ProjectDir)GeneratedFiles\qrc_qcodeeditor_resources.cpp;%(Outputs)</Outputs>
      <Message>rcc qcodeeditor_resources.qrc</Message>
    </CustomBuild>
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>

Appendix B - QCodeEditor.vcxproj.filters

Write to %PROJ_DIR%\QCodeEditor.vcxproj.filters.

xml
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files"><UniqueIdentifier>{11111111-1111-1111-1111-111111111111}</UniqueIdentifier></Filter>
    <Filter Include="Generated Files"><UniqueIdentifier>{22222222-2222-2222-2222-222222222222}</UniqueIdentifier></Filter>
    <Filter Include="Headers (moc)"><UniqueIdentifier>{33333333-3333-3333-3333-333333333333}</UniqueIdentifier></Filter>
    <Filter Include="Resources"><UniqueIdentifier>{44444444-4444-4444-4444-444444444444}</UniqueIdentifier></Filter>
  </ItemGroup>
</Project>

Appendix C - QCodeEditor.sln

Write to %SRC_ROOT%\vs2015\QCodeEditor.sln.

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QCodeEditor", "QCodeEditor\QCodeEditor.vcxproj", "{A1B2C3D4-E5F6-7890-ABCD-1234567890AB}"
EndProject
Global
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
    Debug|Win32 = Debug|Win32
    Release|Win32 = Release|Win32
  EndGlobalSection
  GlobalSection(ProjectConfigurationPlatforms) = postSolution
    {A1B2C3D4-E5F6-7890-ABCD-1234567890AB}.Debug|Win32.ActiveCfg = Debug|Win32
    {A1B2C3D4-E5F6-7890-ABCD-1234567890AB}.Debug|Win32.Build.0 = Debug|Win32
    {A1B2C3D4-E5F6-7890-ABCD-1234567890AB}.Release|Win32.ActiveCfg = Release|Win32
    {A1B2C3D4-E5F6-7890-ABCD-1234567890AB}.Release|Win32.Build.0 = Release|Win32
  EndGlobalSection
EndGlobal

Troubleshooting

  • LNK2019 unresolved external symbol _WinMain@16: fixed by <EntryPointSymbol>mainCRTStartup</EntryPointSymbol> in Link section (already set in Appendix A)
  • LNK2019 on Qt symbols: confirm Platform=Win32 everywhere; confirm Debug uses d-suffix libs
  • C1083 cannot open QtCore/qglobal.h: include dirs missing
  • Runtime "could not find Qt platform plugin windows": platforms\qwindows.dll missing - re-run windeployqt
  • moc parse errors: ensure the .hpp is a real Q_OBJECT header and paths resolve
Content is user-generated and unverified.
    VS 2015 Qt Code Editor Build Guide – Manual MOC/RCC Setup | Claude