forked from qt-creator/qt-creator
		
	* Update license in documentation files. Stay at FDL, but update URLs as well as license for examples, etc. Change-Id: I5e8cb5a20f0e9d52fba1d937b7c73197d69dd747 Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
		
			
				
	
	
		
			367 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			367 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/****************************************************************************
 | 
						|
**
 | 
						|
** Copyright (C) 2016 The Qt Company Ltd.
 | 
						|
** Contact: https://www.qt.io/licensing/
 | 
						|
**
 | 
						|
** This file is part of the Qt Creator documentation.
 | 
						|
**
 | 
						|
** 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.
 | 
						|
**
 | 
						|
****************************************************************************/
 | 
						|
 | 
						|
/*!
 | 
						|
    \page first-plugin.html
 | 
						|
    \title Creating Your First Plugin
 | 
						|
 | 
						|
    This section describes how to create a \QC plugin by using the plugin
 | 
						|
    template provided by \QC, and get the first impression of what a plugin
 | 
						|
    consists of and what its general structure is.
 | 
						|
 | 
						|
    \section1 Creating a Plugin Project
 | 
						|
 | 
						|
    \QC comes with a wizard for \QC plugins, that creates a runable, \e minimal
 | 
						|
    plugin for you. We strongly suggest that you use two different \QC instances
 | 
						|
    for developing and testing your plugin with. Otherwise your plugin will also
 | 
						|
    be loaded in your development environment, which can make that unstable
 | 
						|
    while your plugin is still unstable. You can just create a copy of your \QC
 | 
						|
    build and use one for actually developing, and the other for testing your
 | 
						|
    plugin with.
 | 
						|
 | 
						|
    You need to make sure that you use the same \QC version that you want to
 | 
						|
    develop for to create the plugin. Because of the \l{Binary and Source
 | 
						|
    Compatibility} rules of \QC, the \QC plugin wizard creates a plugin that
 | 
						|
    might only compile and run with the same \QC version that it was created
 | 
						|
    with.
 | 
						|
 | 
						|
    \list 1
 | 
						|
        \li Select \uicontrol File > \uicontrol {New File or Project} >
 | 
						|
            \uicontrol Library > \uicontrol {Qt Creator Plugin} >
 | 
						|
            \uicontrol Choose.
 | 
						|
 | 
						|
            \image firstplugin-wizard.png "Choose the \QC Plugin Wizard"
 | 
						|
 | 
						|
            The \uicontrol{Introduction and Project Location} dialog opens.
 | 
						|
 | 
						|
            \image firstplugin-nameandpath.png "Choose Name and Place of the Project"
 | 
						|
 | 
						|
        \li Give your project a name and specify in which path this project will
 | 
						|
            be created. The actual plugin's name can be different from the
 | 
						|
            project name. You will choose that name later in the wizard.
 | 
						|
            Continue to the next page.
 | 
						|
 | 
						|
            The \uicontrol {Kit Selection} dialog opens.
 | 
						|
 | 
						|
            \image firstplugin-kitselection.png "Choose the kit to build and run your project with"
 | 
						|
 | 
						|
        \li Select the \l{glossary-buildandrun-kit}{kit} to build and run your
 | 
						|
            project with. For a \QC plugin this needs to be a kit with
 | 
						|
            \uicontrol Desktop device type, and a Qt version that is compatible
 | 
						|
            with the Qt version that your \QC was built with (in the best case
 | 
						|
            the exact same build). If you use an incompatible Qt version to
 | 
						|
            build your plugin, you will get errors while \QC tries to load your
 | 
						|
            plugin. Continue to the next page.
 | 
						|
 | 
						|
            The \uicontrol {Plugin Information} dialog opens.
 | 
						|
 | 
						|
            \image firstplugin-pluginsetup.png "Specify Your Plugin Details"
 | 
						|
 | 
						|
        \li In the \uicontrol {Plugin name} field, type \uicontrol Example. The
 | 
						|
            name of the plugin is used as its identifier, and also is the base
 | 
						|
            for the file names and classes in the code.
 | 
						|
 | 
						|
        \li The values of the following fields are mainly informational, and
 | 
						|
            are shown in the detailed view in \QC's plugin overview
 | 
						|
            (\uicontrol Help > \uicontrol {About Plugins}, or
 | 
						|
            \uicontrol {Qt Creator} > \uicontrol {About Plugins} on Mac).
 | 
						|
 | 
						|
            \list
 | 
						|
                \li \uicontrol {Vendor name} is a short one-word name of the
 | 
						|
                    company or organization that created the plugin. This is
 | 
						|
                    also used for the path name where the plugin will be
 | 
						|
                    deployed to.
 | 
						|
 | 
						|
                \li \uicontrol Copyright is a one-line, short copyright string.
 | 
						|
 | 
						|
                \li \uicontrol License is a multi-line license text (but
 | 
						|
                    shouldn't be pages over pages long, since the interface
 | 
						|
                    doesn't allow nice reading of long texts).
 | 
						|
 | 
						|
                \li \uicontrol{Description} is a relatively short, but possibly
 | 
						|
                    multi-line description of what the plugin does.
 | 
						|
 | 
						|
                \li \uicontrol URL is a website where the user can find more
 | 
						|
                    information about the plugin and/or organization providing
 | 
						|
                    it.
 | 
						|
           \endlist
 | 
						|
 | 
						|
        \li Set the \uicontrol {Qt Creator sources} and
 | 
						|
            \uicontrol{Qt Creator build} fields to the source and build
 | 
						|
            directory of the \QC instance you want to use to test your plugin
 | 
						|
            with, respectively. If you don't do that correctly you will get
 | 
						|
            compile errors for your plugin, and your plugin might not show up in
 | 
						|
            \QC at all.
 | 
						|
 | 
						|
        \li In the \uicontrol {Deploy into} list, select
 | 
						|
            \uicontrol {Qt Creator build}. This sets your \c {.pro} file up to
 | 
						|
            deploy your plugin directly into your \QC build's plugin directory
 | 
						|
            (requires you to have write permissions there). The other option,
 | 
						|
            \uicontrol {Local user settings}, sets your \c {.pro} file up to
 | 
						|
            deploy your plugin into \QC's user plugin path (for example
 | 
						|
            \c {~/.config/QtProject/qtcreator/plugins} on Unix systems). We
 | 
						|
            choose \uicontrol {Qt Creator build} because we use a self-compiled
 | 
						|
            \QC, and want the plugin to be only loaded by that \QC
 | 
						|
            instance. Continue to the next page.
 | 
						|
 | 
						|
            The \uicontrol {Project Management} dialog opens.
 | 
						|
 | 
						|
            \image firstplugin-summary.png "Summary of Created Files"
 | 
						|
 | 
						|
        \li Review the files that will be created, choose a version control
 | 
						|
            system that \QC should use for your project (always a good idea!),
 | 
						|
            and finish the wizard.
 | 
						|
    \endlist
 | 
						|
 | 
						|
    \section1 Building and Running the Plugin
 | 
						|
 | 
						|
    If you passed the correct \QC source and build paths in the project wizard,
 | 
						|
    your plugin should just build fine when pressing the build button. When you
 | 
						|
    try to run your project, \QC will ask you for the executable to run and you
 | 
						|
    are presented the following dialog:
 | 
						|
 | 
						|
    \image firstplugin-runsettings.png "Specify the Executable to Run"
 | 
						|
 | 
						|
    Select the path to the \QC executable from the build that you specified in
 | 
						|
    the \uicontrol {Qt Creator build} setting in the project wizard and click
 | 
						|
    \uicontrol OK. \QC starts up, and you can verify that your plugin
 | 
						|
    successfully loaded by looking for a menu entry \uicontrol Tools >
 | 
						|
    \uicontrol Example and by looking for the plugin in the
 | 
						|
    \uicontrol {About Plugins} dialog.
 | 
						|
 | 
						|
    \image firstplugin-menuitem.png "Menu Registered by the Plugin"
 | 
						|
 | 
						|
    \section1 File Structure
 | 
						|
 | 
						|
    The plugin wizard creates a set of basic files that a plugin needs or should
 | 
						|
    have. We will have a look at some of them in detail in the following
 | 
						|
    sections, here is a short overview:
 | 
						|
 | 
						|
    \table
 | 
						|
    \header
 | 
						|
        \li File
 | 
						|
 | 
						|
        \li Role
 | 
						|
    \row
 | 
						|
        \li \c {Example.json.in}
 | 
						|
 | 
						|
        \li Plugin meta data template. QMake creates an \c {Example.json}
 | 
						|
            from this file, which is compiled into the plugin as meta data.
 | 
						|
            The meta data is read by \QC to find out about the plugin.
 | 
						|
    \row
 | 
						|
        \li \c {example.pro}
 | 
						|
 | 
						|
        \li Project file, used by QMake to generate a Makefile that then is used to
 | 
						|
            build the plugin.
 | 
						|
    \row
 | 
						|
        \li \c {example_global.h}
 | 
						|
 | 
						|
        \li Contains macro definitions that are useful when this plugin should export
 | 
						|
            symbols to other plugins.
 | 
						|
    \row
 | 
						|
        \li \c {exampleconstants.h}
 | 
						|
 | 
						|
        \li Header defining constants used by the plugin code.
 | 
						|
    \row
 | 
						|
        \li \c{exampleplugin.h/.cpp}
 | 
						|
 | 
						|
        \li C++ header and source files that define the plugin class that will be
 | 
						|
            instanciated and run by \QC's plugin manager.
 | 
						|
    \endtable
 | 
						|
 | 
						|
    \section1 qmake Project
 | 
						|
 | 
						|
    The qmake project file \c {example.pro} defines how your plugin should be
 | 
						|
    compiled. \QC plugins need to have a specific setup there, in addition to
 | 
						|
    telling qmake which files need to be compiled (or handled by \c moc or
 | 
						|
    \c uic). Let us have a look at what the project wizard generated for you in
 | 
						|
    detail.
 | 
						|
 | 
						|
    \snippet exampleplugin/example.pro 1
 | 
						|
 | 
						|
    The first section of the .pro file lets the compiler pass an
 | 
						|
    \c EXAMPLE_LIBRARY define to the compiled code, which is used in the
 | 
						|
    \c {example_global.h} header, but is not really of interest for now. You
 | 
						|
    should not need to change that section of the \c {.pro} file.
 | 
						|
 | 
						|
    \snippet exampleplugin/example.pro 2
 | 
						|
 | 
						|
    This section tells qmake about the files of your project that it should let
 | 
						|
    compile or otherwise handle. You need to expand that section with any files
 | 
						|
    you add to the project.
 | 
						|
 | 
						|
    \snippet exampleplugin/example.pro 3
 | 
						|
 | 
						|
    To compile and deploy your plugin, the project needs access to the \QC
 | 
						|
    sources and build. This section contains the logic that looks for the
 | 
						|
    information about the location of the sources and build in the
 | 
						|
    \c {QTC_SOURCE} and \c {QTC_BUILD} environment variables. If these are not
 | 
						|
    defined, it uses the defaults you set in the project wizard.
 | 
						|
 | 
						|
    So, if someone else opens your plugin project on their machine, they do not
 | 
						|
    need to edit the .pro file, but instead they should set the \c {QTC_SOURCE}
 | 
						|
    and \c {QTC_BUILD} environment variables correctly for the plugin's build
 | 
						|
    environment.
 | 
						|
 | 
						|
    You should not need to change this section, except perhaps to adapt the
 | 
						|
    defaults.
 | 
						|
 | 
						|
    \snippet exampleplugin/example.pro 4
 | 
						|
 | 
						|
    \QC plugins can either be installed into the \QC installation's plugin
 | 
						|
    directory (requires write access there), or to a user specific plugin
 | 
						|
    directory. The \c USE_USER_DESTDIR switch in the .pro file defines which
 | 
						|
    method is used for building the plugin (which is independent from what you
 | 
						|
    can later use for distributing your plugin to other users).
 | 
						|
 | 
						|
    \snippet exampleplugin/example.pro 5
 | 
						|
 | 
						|
    This section defines the name and dependencies of your plugin. The
 | 
						|
    \c {QTC_PLUGIN_NAME} variable defines the name of your plugin, and the name
 | 
						|
    of the dynamic library that is created for it. The \c {QTC_LIB_DEPENDS}
 | 
						|
    variable is a list of library names of the \QC utility libraries that your
 | 
						|
    plugin depends on. Typical values would be \c aggregation,
 | 
						|
    \c extensionsystem and \c utils. The \c {QTC_PLUGIN_DEPENDS} variable
 | 
						|
    defines the \QC plugins that your plugin depends on. Almost all \QC plugins
 | 
						|
    will depend on the \c coreplugin. The \c {QTC_PLUGIN_RECOMMENDS} variable
 | 
						|
    defines the \QC plugins that your plugin optionally depends on. For more
 | 
						|
    information, see \l{Optional Dependencies}.
 | 
						|
 | 
						|
    \snippet exampleplugin/example.pro 6
 | 
						|
 | 
						|
    The included file \c{qtcreatorplugin.pri} makes sure that you build a plugin
 | 
						|
    that is suitable for use in \QC, by using the information you gave above.
 | 
						|
 | 
						|
    For more information about qmake, and writing \c {.pro} files in general,
 | 
						|
    see the \l{qmake Manual}.
 | 
						|
 | 
						|
    \section1 Plugin Meta Data Template
 | 
						|
 | 
						|
    The \c {.json} file is a JSON file that contains information that is needed
 | 
						|
    by the plugin manager to find your plugin and resolve its dependencies
 | 
						|
    before actually loading your plugin's library file. We will only have a
 | 
						|
    short look at it here. For more information, see \l{Plugin Meta Data}.
 | 
						|
 | 
						|
    The wizard doesn't actually create a .json file directly, but instead a
 | 
						|
    \c {.json.in} file. qmake uses this to generate the actual plugin .json
 | 
						|
    meta data file, replacing variables like \c {QTCREATOR_VERSION} with their
 | 
						|
    actual values. Therefore you need to escape all backslashes and quotes in
 | 
						|
    the \c {.json.in} file (i.e. you need to write \c {\} to get a backslash
 | 
						|
    and \c{\"} to get a quote in the generated plugin JSON meta data).
 | 
						|
 | 
						|
    \snippet exampleplugin/Example.json.in 1
 | 
						|
 | 
						|
    The first items in the meta data that is created by the wizard define the
 | 
						|
    name of your plugin, its version, and with what version of this plugin the
 | 
						|
    current version is binary compatible with.
 | 
						|
 | 
						|
    \snippet exampleplugin/Example.json.in 2
 | 
						|
 | 
						|
    After that you'll find the information about the plugin that you gave in the
 | 
						|
    project wizard.
 | 
						|
 | 
						|
    \snippet exampleplugin/Example.json.in 3
 | 
						|
 | 
						|
    The \c {$$dependencyList} variable is automatically replaced by the
 | 
						|
    dependency information in \c {QTC_PLUGIN_DEPENDS} and
 | 
						|
    \c {QTC_PLUGIN_RECOMMENDS} from your plugin's \c {.pro} file.
 | 
						|
 | 
						|
    \section1 Plugin Class
 | 
						|
 | 
						|
    The files \c {exampleplugin.h} and \c {exampleplugin.cpp} define the plugin
 | 
						|
    implementation of your little plugin. We'll concentrate on some highlights
 | 
						|
    here, and give pointers to more detailed information for the various parts.
 | 
						|
 | 
						|
    \section2 Header File
 | 
						|
 | 
						|
    The header file \c {exampleplugin.h} defines the interface of the plugin
 | 
						|
    class.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.h namespaces
 | 
						|
 | 
						|
    The plugin is defined in a \c {Example::Internal} namespace, which conforms
 | 
						|
    to the coding rules for \l{coding-rules-namespacing}{namespacing}
 | 
						|
    in \QC sources.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.h base class
 | 
						|
 | 
						|
    All \QC plugins must be derived from \l{ExtensionSystem::IPlugin} and
 | 
						|
    are QObjects. The \c {Q_PLUGIN_METADATA} macro is necessary to create a
 | 
						|
    valid Qt plugin. The \c IID given in the macro must be
 | 
						|
    \c {org.qt-project.Qt.QtCreatorPlugin}, to identify it as a \QC plugin, and
 | 
						|
    \c FILE must point to the plugin's meta data file as described in
 | 
						|
    \l{Plugin Meta Data}.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.h plugin functions
 | 
						|
 | 
						|
    The base class defines basic functions that are called during the life cycle
 | 
						|
    of a plugin, which are here implemented for your new plugin. These functions
 | 
						|
    and their roles are described in detail in \l{The Plugin Life Cycle}.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.h slot
 | 
						|
 | 
						|
    The plugin has an additional custom slot, that is used to pop up a dialog
 | 
						|
    when the user chooses the menu item that this plugin adds.
 | 
						|
 | 
						|
    \section2 Source File
 | 
						|
 | 
						|
    The source file contains the actual implementation of the plugin, which
 | 
						|
    registers a new menu and menu item, and opens a message box when that item
 | 
						|
    is triggered.
 | 
						|
 | 
						|
    All the necessary header files from the plugin code itself, from the \c
 | 
						|
    Core plugin, and from Qt are included in the beginning of the file. The
 | 
						|
    setup of the menu and menu item is done in the plugin's \c initialize
 | 
						|
    function, which is the first thing called after the plugin constructor. In
 | 
						|
    that function, the plugin can be sure that the basic setup of plugin's that
 | 
						|
    it depends on has been done, for example the Core plugin's \c ActionManager
 | 
						|
    instance has been created.
 | 
						|
 | 
						|
    For more information about implementing the plugin interface, see the
 | 
						|
    \l{ExtensionSystem::IPlugin} API documentation and \l{Plugin Life Cycle}.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.cpp add action
 | 
						|
 | 
						|
    This part of the code creates a new \c QAction, registers it as a new
 | 
						|
    \c Command in the action manager, and connects it to the plugin's slot. The
 | 
						|
    action manager provides a central place where the user can assign and change
 | 
						|
    keyboard shortcuts, and manages cases where for example a menu item should
 | 
						|
    be directed to different plugins under different circumstances, as well as a
 | 
						|
    few other things. This is described in more detail in
 | 
						|
    \l{Menus and Menu Items}.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.cpp add menu
 | 
						|
 | 
						|
    Here a new menu item is created, the created command added to it, and the
 | 
						|
    menu added to the \uicontrol Tools menu in the menu bar. Again, this is
 | 
						|
    covered in more detail in \l{Menus and Menu Items}.
 | 
						|
 | 
						|
    \snippet exampleplugin/exampleplugin.cpp slot implementation
 | 
						|
 | 
						|
    This part defines the code that is called when the menu item is triggered.
 | 
						|
    It uses the Qt API to open a message box that displays informative text and
 | 
						|
    an \uicontrol OK button.
 | 
						|
*/
 |