Starting in 3ds Max 2017, Qt became an integral part of the application UI. Plug-in developers can now leverage Qt to create compelling UIs for their own Max projects. Although the SDK provides exposure for customized 3ds Max-specific widgets (see maxsdk/include/Qt), getting a project up and running in Visual Studio requires you to jump through a few hoops. This tutorial will run through what you need to do to get up and running.
The basic requirements are:
- 3ds Max 2018 SDK
- Visual Studio 2015
- + the 3ds Max Plug-in Wizard
- + the Qt VS Tools extension
- Qt 5.6.2, specifically the msvc2015_64 tools and
To set up your project:
- Create a new 3ds Max Plug-in project using the
plug-in wizard. This will set up
property sheets and paths, and give you some skeleton plug-in code.
- Hack the .vcxproj file, adding this
<PropertyGroup Label="Globals">This associates the project with the Qt VS Tools extension. Ideally, the 3ds Max Plug-in Wizard would do
this for you, but it doesn’t (yet).
- Reload your project in Visual Studio (it should
prompt you to reload, click yes). You
can now select Qt VS Tools > Convert
Project to Qt VS Tools Project.
- Select Qt VS Tools > Qt Options, and on the
Qt Versions tab, ensure that you have a Qt version pointing at your installation
of Qt 5.6:
- Select Qt
VS Tools > Qt Project Settings, and on the Qt Modules tab check Core,
GUI, and Widgets, which is the minimum you need. You can include other Qt modules for
additional functionality, as Qt provides a lot more than just a UI tookit.
- Almost done.
Under the project’s settings, under Configuration
Properties > C/C++ > General > Additional Include Directories, add
$(QtInc). Under Configuration Properties > Linker > General > Additional
Library Directories, add $(QtLib).
These are required because the Qt VS Tools and Max SDK organize Qt
directory paths slightly differently.
That’s it, you should be able to now compile your empty 3ds Max Plug-in to confirm that everything is set up properly, though it won’t do anything. We'll cover adding some Qt-based functionality in future tutorials.