2011-04-27 15:41:34 +02:00
|
|
|
/****************************************************************************
|
|
|
|
**
|
2016-01-15 14:51:16 +01:00
|
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
|
|
** Contact: https://www.qt.io/licensing/
|
2011-04-27 15:41:34 +02:00
|
|
|
**
|
2016-01-15 14:51:16 +01:00
|
|
|
** This file is part of the Qt Creator documentation.
|
2011-04-27 15:41:34 +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-04-27 15:41:34 +02:00
|
|
|
**
|
2016-01-15 14:51:16 +01:00
|
|
|
** GNU Free Documentation License Usage
|
2011-04-27 15:41:34 +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-04-27 15:41:34 +02:00
|
|
|
**
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
/*!
|
2013-06-14 14:58:08 +02:00
|
|
|
\page extending-index.html
|
2011-04-27 15:41:34 +02:00
|
|
|
\title Extending Qt Creator Manual
|
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
\QC is a cross-platform integrated development environment (IDE) tailored to
|
|
|
|
the needs of Qt developers.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
\QC is extensible in various ways. For example, \QC architecture is based on
|
|
|
|
a plugin loader, which means that all functionality beyond plugin loading
|
|
|
|
is implemented in plugins. However, you can extend and tweak many parts of
|
|
|
|
\QC without the need to resort to coding in C++ and implementing such a
|
|
|
|
plugin.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
This document gives you an overview of the various ways in which you can
|
|
|
|
extend \QC, depending on what you want to achieve, and points you to the
|
|
|
|
relevant documentation.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section1 Generating Domain Specific Code and Templates
|
2011-04-28 09:26:17 +02:00
|
|
|
|
|
|
|
If you regularly need to write the same code, be it little code snippets,
|
2015-06-23 16:53:04 +02:00
|
|
|
whole files or classes spread over multiple files, or complete projects, you
|
|
|
|
can create code snippets, templates, and wizards for that purpose.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2011-05-27 14:30:17 +02:00
|
|
|
\section2 Snippets
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
Typically, snippets consist of a few lines of code (although they can also
|
|
|
|
be plain text) that you regularly want to insert into a bigger body of code,
|
|
|
|
but do not want to type each time. For example, \c while and \c for loops,
|
|
|
|
\c if-else and \c try-catch constructs, and class skeletons. Snippets are
|
|
|
|
triggered in the same way as normal code completion (see
|
|
|
|
\l{Code Assist}{Providing Code Assist}).
|
|
|
|
\QC contains a set of preconfigured snippets groups to which you can add
|
|
|
|
your own snippets.
|
2011-04-28 17:18:57 +02:00
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-completing-code.html#editing-code-snippets}
|
|
|
|
{Snippets User Interface}
|
|
|
|
\li \l{Snippets}{Adding Snippets Groups}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
\section2 File and Project Templates
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
You can extend the wizards in \uicontrol File >
|
|
|
|
\uicontrol {New File or Project} with your own file and project templates by
|
|
|
|
writing JSON definition files for them.
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-project-wizards.html}
|
|
|
|
{Adding New Custom Wizards}
|
|
|
|
\li \l{User Interface Text Guidelines}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section2 Custom Wizards
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
If the above methods for code snippets and templates are not sufficient for
|
|
|
|
your use case, you can create a custom \QC plugin. While this gives you
|
|
|
|
complete control over the wizard, it also requires you to write most of the
|
|
|
|
UI and the logic yourself.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:45 +02:00
|
|
|
\li \l{Creating Plugins}
|
|
|
|
\li \l{Qt Creator Coding Rules}
|
|
|
|
\li \l{Creating Wizards in Code}
|
|
|
|
\li \l{User Interface Text Guidelines}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section1 Supporting Additional File Types
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
If you have files with extensions or MIME types that \QC does not handle by
|
|
|
|
default, you can edit the MIME type definitions, add highlight definition
|
|
|
|
files, and create your own text editors.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section2 MIME Types
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
You might find that \QC could handle a particular file of yours if it knew
|
|
|
|
about the type of its contents. For example, C++ header or source files
|
|
|
|
with file extensions that are not known to \QC. You can adapt the MIME type
|
|
|
|
definitions in \QC to your specific setup, by adding or removing file
|
|
|
|
extensions and specifying magic headers.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-mime-types.html}
|
|
|
|
{Editing MIME Types}
|
|
|
|
\li \l{http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html}
|
|
|
|
{MIME Type Specification Files}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
|
|
|
\section2 Text Highlighting and Indentation
|
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
For text files, \QC provides an easy way to add highlighting and indentation
|
|
|
|
for file types that are not known to it by default. Generic highlighting is
|
|
|
|
based on highlight definition files that are provided by the Kate Editor.
|
|
|
|
You can download highlight definition files for use with \QC and create
|
|
|
|
your own definition files.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-editor-options.html#generic-highlighting}
|
|
|
|
{Generic Highlighting}
|
|
|
|
\li \l{http://kate-editor.org/2005/03/24/writing-a-syntax-highlighting-file/}
|
|
|
|
{Writing a Syntax Highlighting File}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
|
|
|
\section2 Custom Text Editors
|
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
If you need more advanced features than the MIME type and highlighting
|
|
|
|
features described above, such as custom text completion or features that
|
2015-06-23 16:53:04 +02:00
|
|
|
rely on semantic analysis, you can extend \QC with a text editor of your
|
|
|
|
own. \QC provides a special API for text editors that gives you a basis to
|
|
|
|
build on, taking away some of the pain of implementing a text editor from
|
|
|
|
the ground up.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:45 +02:00
|
|
|
\li \l{Creating Plugins}
|
|
|
|
\li \l{Qt Creator Coding Rules}
|
|
|
|
\li \l{Text Editors}
|
|
|
|
\li \l{CodeAssist} {Providing Code Assist}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section2 Other Custom Editors
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
You can also add a completely custom editor to gain complete control over
|
|
|
|
its appearance and behavior.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:45 +02:00
|
|
|
\li \l{Creating Plugins}
|
|
|
|
\li \l{Qt Creator Coding Rules}
|
|
|
|
\li \l{Editors}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
|
|
|
\section1 Running External Tools
|
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
Most software projects and development processes require various external
|
|
|
|
tools. Several external tools, such as popular version control systems and
|
2015-06-23 16:53:04 +02:00
|
|
|
build tool chains are integrated into \QC. However, it is impossible for a
|
|
|
|
single tool to cover all the use cases, and therefore you can integrate
|
|
|
|
additional tools to \QC.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section2 Simple External Tools
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
In \QC, you can specify tools that you can then run from a menu or by using
|
|
|
|
a keyboard shortcut that you assign. This allows you to accomplish several
|
|
|
|
things, with some limitations. You specify a command to run, arguments and
|
|
|
|
input for running it, and how to handle the output. To specify the values,
|
|
|
|
you can use a set of internal \QC variables, such as the file name of the
|
|
|
|
current document or project, or the currently selected text in a text
|
|
|
|
editor. If you find variables missing, please do not hesitate to fill a
|
|
|
|
feature suggestion. The tool descriptions are saved as XML files that you
|
|
|
|
can share.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-editor-external.html}
|
|
|
|
{Using External Tools}
|
|
|
|
\li \l{External Tool Specification Files}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
\section2 Complex External Tools
|
2011-04-28 09:26:17 +02:00
|
|
|
|
2011-04-28 17:18:57 +02:00
|
|
|
When you plan to integrate more complex tools, carefully consider whether
|
|
|
|
there really are advantages to be gained by tightly integrating the tool
|
2015-06-23 16:53:04 +02:00
|
|
|
into \QC over loosely integrating it by mainly providing a means of starting
|
|
|
|
the tool with fitting parameters.
|
2011-04-28 09:26:17 +02:00
|
|
|
|
|
|
|
\section3 Loosely Integrating Tools
|
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
If no interaction is needed between \QC and the external tool, just starting
|
|
|
|
an external application with its own user interface is preferable. That way
|
|
|
|
cluttering the \QC UI is avoided, and the tool will be available with a
|
|
|
|
nice interface even without using \QC at all.
|
2011-04-28 17:18:57 +02:00
|
|
|
|
|
|
|
Usually, you can use the external tool specification files to start the
|
|
|
|
tool. If starting the tool and handling its output require more complex
|
2015-06-23 16:53:04 +02:00
|
|
|
logic, you can add a menu item to \QC with a plugin. If you need a way to
|
|
|
|
configure the tool in \QC, you can add an \uicontrol Options page for it.
|
|
|
|
|
2011-04-27 15:41:34 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-editor-external.html}{Using External Tools}
|
|
|
|
\li \l{External Tool Specification Files}
|
|
|
|
\li \l{Creating Plugins}
|
|
|
|
\li \l{Qt Creator Coding Rules}
|
|
|
|
\li \l{Menus and Menu Items}
|
|
|
|
\li \l{Options Pages}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
|
|
|
\section3 Interacting with Tool Output
|
2011-04-27 15:41:34 +02:00
|
|
|
|
2015-06-23 16:53:04 +02:00
|
|
|
In some cases, running an external tool would not require tight integration
|
|
|
|
with \QC, but investigating the output of the tool would benefit from it.
|
|
|
|
For example, some tools generate lists of issues in files that are part of
|
|
|
|
the project and some tools create output that is related to the code. For
|
|
|
|
these tools, it is useful to interactively switch between the output and
|
|
|
|
the corresponding code.
|
|
|
|
|
|
|
|
One way to handle that would be to let the tool create an output file, which
|
|
|
|
is then opened within \QC. You provide an editor (probably read-only) for
|
|
|
|
handling this file. For lists of issues, consider creating task list files
|
|
|
|
which are shown in the \uicontrol Issues output pane.
|
|
|
|
|
2011-04-28 09:26:17 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://doc.qt.io/qtcreator/creator-task-lists.html}
|
|
|
|
{Showing Task List Files in the Issues Pane}
|
|
|
|
\li \l{Creating Plugins}
|
|
|
|
\li \l{Qt Creator Coding Rules}
|
|
|
|
\li \l{Menus and Menu Items}
|
|
|
|
\li \l{Options Pages}
|
|
|
|
\li \l{Editors}
|
2011-04-28 09:26:17 +02:00
|
|
|
\endlist
|
|
|
|
|
|
|
|
\section1 All Topics
|
|
|
|
|
|
|
|
\list
|
2013-09-25 18:19:45 +02:00
|
|
|
\li \l{Developing Qt Creator Plugins}
|
2011-04-27 15:41:34 +02:00
|
|
|
\list
|
2015-06-23 16:53:45 +02:00
|
|
|
\li \l{Creating Plugins}
|
|
|
|
\li \l{Menus and Menu Items}
|
|
|
|
\li \l{Creating Wizards in Code}
|
|
|
|
\li \l{Editors}
|
|
|
|
\li \l{Text Editors}
|
|
|
|
\li \l{Options Pages}
|
2011-04-27 15:41:34 +02:00
|
|
|
\endlist
|
2013-09-25 18:19:45 +02:00
|
|
|
\li Reference
|
2011-04-27 15:41:34 +02:00
|
|
|
\list
|
2015-06-23 16:53:04 +02:00
|
|
|
\li \l{http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html}
|
|
|
|
{MIME Type Specification Files}
|
|
|
|
\li \l{External Tool Specification Files}
|
|
|
|
\li \l{http://kate-editor.org/2005/03/24/writing-a-syntax-highlighting-file/}
|
|
|
|
{Highlight Definition Files}
|
|
|
|
\li \l{Qt Creator Variables}
|
|
|
|
\li \l{User Interface Text Guidelines}
|
|
|
|
\li \l{Writing Documentation}
|
|
|
|
\li \l{Qt Creator Coding Rules}
|
|
|
|
\li \l{Qt Creator API Reference}
|
|
|
|
\endlist
|
2011-04-27 15:41:34 +02:00
|
|
|
\endlist
|
|
|
|
*/
|