| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | /**************************************************************************** | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | ** Copyright (C) 2016 The Qt Company Ltd. | 
					
						
							|  |  |  | ** Contact: https://www.qt.io/licensing/ | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | ** This file is part of the Qt Creator documentation. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | ** 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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | ** GNU Free Documentation License Usage | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | ** Alternatively, this file may be used under the terms of the GNU Free | 
					
						
							|  |  |  | ** Documentation License version 1.3 as published by the Free Software | 
					
						
							| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | ** 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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2016-01-15 14:51:16 +01:00
										 |  |  | ****************************************************************************/ | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /*! | 
					
						
							|  |  |  |     \page first-plugin.html | 
					
						
							|  |  |  |     \title Creating Your First Plugin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This section describes how to create a \QC plugin by using the plugin | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     template provided by \QC, and get the first impression of what a plugin | 
					
						
							|  |  |  |     consists of and what its general structure is. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \section1 Creating a Plugin Project | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     \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. | 
					
						
							| 
									
										
										
										
											2014-11-25 08:05:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \list 1 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |         \li Select \uicontrol File > \uicontrol {New File or Project} > | 
					
						
							|  |  |  |             \uicontrol Library > \uicontrol {Qt Creator Plugin} > | 
					
						
							|  |  |  |             \uicontrol Choose. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             \image firstplugin-wizard.png "Choose the \QC Plugin Wizard" | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-17 17:15:42 +01:00
										 |  |  |             The \uicontrol{Introduction and Project Location} dialog opens. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             \image firstplugin-nameandpath.png "Choose Name and Place of the Project" | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |         \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. | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             Continue to the next page. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |             The \uicontrol {Kit Selection} dialog opens. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             \image firstplugin-kitselection.png "Choose the kit to build and run your project with" | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |         \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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |             The \uicontrol {Plugin Information} dialog opens. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             \image firstplugin-pluginsetup.png "Specify Your Plugin Details" | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |         \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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li The values of the following fields are mainly informational, and | 
					
						
							|  |  |  |             are shown in the detailed view in \QC's plugin overview | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |             (\uicontrol Help > \uicontrol {About Plugins}, or | 
					
						
							|  |  |  |             \uicontrol {Qt Creator} > \uicontrol {About Plugins} on Mac). | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             \list | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |                 \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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |            \endlist | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |         \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 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |             \QC, and want the plugin to be only loaded by that \QC | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |             instance. Continue to the next page. | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |             The \uicontrol {Project Management} dialog opens. | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |             \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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \endlist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     \section1 Building and Running the Plugin | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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: | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \image firstplugin-runsettings.png "Specify the Executable to Run" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \image firstplugin-menuitem.png "Menu Registered by the Plugin" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     \section1 File Structure | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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: | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \table | 
					
						
							|  |  |  |     \header | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li File | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li Role | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \row | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |         \li \c {Example.json.in} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         \li Plugin meta data template. QMake creates an \c {Example.json} | 
					
						
							| 
									
										
										
										
											2014-08-26 17:29:38 +02:00
										 |  |  |             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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \row | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |         \li \c {example.pro} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li Project file, used by QMake to generate a Makefile that then is used to | 
					
						
							|  |  |  |             build the plugin. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \row | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |         \li \c {example_global.h} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li Contains macro definitions that are useful when this plugin should export | 
					
						
							|  |  |  |             symbols to other plugins. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \row | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |         \li \c {exampleconstants.h} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li Header defining constants used by the plugin code. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \row | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li \c{exampleplugin.h/.cpp} | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-25 18:19:45 +02:00
										 |  |  |         \li C++ header and source files that define the plugin class that will be | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |             instanciated and run by \QC's plugin manager. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \endtable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     \section1 qmake Project | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \snippet exampleplugin/example.pro 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     So, if someone else opens your plugin project on their machine, they do not | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     You should not need to change this section, except perhaps to adapt the | 
					
						
							|  |  |  |     defaults. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \snippet exampleplugin/example.pro 4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     \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). | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \snippet exampleplugin/example.pro 5 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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}. | 
					
						
							| 
									
										
										
										
											2014-03-31 11:04:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-25 08:45:19 +03:00
										 |  |  |     \snippet exampleplugin/example.pro 6 | 
					
						
							| 
									
										
										
										
											2014-03-31 11:04:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     For more information about qmake, and writing \c {.pro} files in general, | 
					
						
							| 
									
										
										
										
											2015-02-18 10:20:03 +01:00
										 |  |  |     see the \l{qmake Manual}. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 17:29:38 +02:00
										 |  |  |     \section1 Plugin Meta Data Template | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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}. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 17:29:38 +02:00
										 |  |  |     The wizard doesn't actually create a .json file directly, but instead a | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     \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). | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 17:29:38 +02:00
										 |  |  |     \snippet exampleplugin/Example.json.in 1 | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 17:29:38 +02:00
										 |  |  |     \snippet exampleplugin/Example.json.in 2 | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     After that you'll find the information about the plugin that you gave in the | 
					
						
							|  |  |  |     project wizard. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-26 17:29:38 +02:00
										 |  |  |     \snippet exampleplugin/Example.json.in 3 | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \section1 Plugin Class | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:46:26 +02:00
										 |  |  |     The files \c {exampleplugin.h} and \c {exampleplugin.cpp} define the plugin | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     The header file \c {exampleplugin.h} defines the interface of the plugin | 
					
						
							|  |  |  |     class. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \snippet exampleplugin/exampleplugin.h namespaces | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     The plugin is defined in a \c {Example::Internal} namespace, which conforms | 
					
						
							|  |  |  |     to the coding rules for \l{coding-rules-namespacing}{namespacing} | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     in \QC sources. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     \snippet exampleplugin/exampleplugin.h base class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     All \QC plugins must be derived from \l{ExtensionSystem::IPlugin} and | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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}. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-07 13:34:40 +02:00
										 |  |  |     \snippet exampleplugin/exampleplugin.h plugin functions | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-07 13:34:40 +02:00
										 |  |  |     The base class defines basic functions that are called during the life cycle | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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}. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-02 06:36:25 +01:00
										 |  |  |     For more information about implementing the plugin interface, see the | 
					
						
							|  |  |  |     \l{ExtensionSystem::IPlugin} API documentation and \l{Plugin Life Cycle}. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  |     \snippet exampleplugin/exampleplugin.cpp add action | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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}. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \snippet exampleplugin/exampleplugin.cpp add menu | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-23 15:45:36 +02:00
										 |  |  |     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}. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     \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 | 
					
						
							| 
									
										
										
										
											2014-12-17 17:15:42 +01:00
										 |  |  |     an \uicontrol OK button. | 
					
						
							| 
									
										
										
										
											2011-10-10 08:32:07 +02:00
										 |  |  | */ |