/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/* NOT DOCUMENTED !
  \page qmsdev.html

  \title The QMsDev Plugin

  The Visual Studio Integration Plugin is currently available only to users of
  Visual Studio 6. It offers simple ways of doing common tasks when writing a
  Qt application.

  \tableofcontents

  \section1 How to Install the Visual Studio Integration Plugin

  When you install Qt, the integration plugin should be installed for you,
  however, sometimes this does  not happen, so to install the integration
  plugin manually just carry out the following steps.

  \list
  \li Start up Visual Studio.
  \li Select Tools|Customize|Add-ins and Macro Files.
  \li Ensure that there is a tick next to QMsDev Developer Studio Add-In.
  \li Click Close.
  \endlist

  Now the integration plugin should be installed. If this doesn't
  work, then contact Qt technical support giving details of
  what went wrong.

  \section1 How to Uninstall the Visual Studio Integration Plugin

  When you want to uninstall the integration plugin, just carry out the
  following steps.

  \list
  \li Close down any instances of Visual Studio.
  \li Delete the file '%MSDevDir%\\addins\\qmsdev.dll'
  \endlist

  \section1 What Can the Visual Studio Integration Plugin Do?

  The integration plugin adds the following options to Visual Studio:

  \list
  \li New Qt Project
  \li New Qt Dialog
  \li Qt Designer
  \li Open Qt Project
  \li Write Qt Project
  \li Use Qt In Current Project
  \li Add MOC
  \endlist

  \section2 Using the 'New Qt Project' button

  The 'New Qt Project' button allows you to create a simple Qt project
  ready for development. Simply fill in the form and if you select
  'Dialog' or 'Main Window' without MDI support then it will
  automatically start up \e{Qt Designer}. When you have finished with
  the form in \e{Qt Designer} just save it and it will appear in a
  ready made Qt project.

  If you select 'Main Window' with 'MDI Support' then it will simply
  give you a code skeleton in a project ready for you to populate with
  your own code.

  \section2 Using the 'New Qt Dialog' button

  The 'New Qt Dialog' button works in two ways: You can use it to create a new
  dialog for your project; or you can  use it to insert an existing
  dialog into your project.

  If you want to create a new dialog then all you need to do is specify where
  the dialog file should be saved and give it a name. This will start up
  \e{Qt Designer} to allow you to design your new dialog, and will add it to
  the existing  project.

  If you want to add an existing dialog to your project, then just select the
  relevant UI file. This will then add it to your existing project and add
  the relevant steps to create the generated code.

  \section2 Using the 'Qt Designer' button

  The 'Qt Designer' button simply starts up \e{Qt Designer}, it has no ties to
  your existing project so whatever you do with it will not affect your
  existing projects. It can also be started up by using the Ctrl+Shift+D key
  combination in Visual Studio.

  \section2 Using the 'Open Qt Project' button

  The 'Open Qt Project' button allows you to convert an existing \c
  qmake project file into a \c .dsp file which you can insert into
  your existing workspace. When you click the 'Open Qt Project'
  button, just select an existing \c qmake project file (a \c .pro
  file) and then click OK. You will get a message box at the end
  which asks you to insert the newly created \c .dsp file into your
  existing workspace.

  \section2 Using the 'Write Qt Project' button

  The 'Write Qt Project' button creates a \c qmake project (\c .pro)
  file for your current project so that you can easily copy the files
  onto another platform and be able to use \c qmake to create a Makefile
  on that other platform. All you need to do is make the project you
  want to create a \c .pro file for, and click on the button. Just
  name your \c qmake project file and click Save.

  \section2 Using the 'Use Qt In Current Project' button

  The 'Use Qt In Current Project' button simply adds in the necessary
  information for the current project so that it links against Qt and
  sets any other settings needed to use Qt in that project.

  \section2 Using the 'Add MOC' button

  The 'Add MOC' button will add in the custom build step for the selected file
  so that it creates any needed MOC files and it will add these generated
  files to the project. All you need to do to use it is click on a file that
  has Q_OBJECT and click the button.

  You only need to use this button if you added a file that has
  Q_OBJECT in it by hand, you don't need to use this if you used any
  of the previously mentioned buttons. It can also be invoked by using
  the \key{Ctrl+Shift+M} key combination in Visual Studio.

*/
