forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/3.3'
Conflicts: src/plugins/cppeditor/cppdocumentationcommenthelper.cpp Change-Id: I2cf25eba1de149765a6c44ad354d606ce9de512d
This commit is contained in:
@@ -147,7 +147,7 @@
|
||||
The anddroiddeployqt tool uses the information in the project .pro file to
|
||||
create APKs. For more information about the qmake variables
|
||||
that you can set in the .pro file to tailor the APK, see
|
||||
\l{Deploying an Application on Android#qmake-variables}{qmake Variables}.
|
||||
\l{Deploying an Application on Android}.
|
||||
|
||||
You can view information about what the anddroiddeployqt tool is doing in
|
||||
the \uicontrol {Compile Output} pane. To view additional information, select the
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
{Qt application}, and therefore, it accepts the command line options
|
||||
that all Qt applications accept. For example, you can use the \c {-style} and
|
||||
\c {-stylesheet} options to apply custom styles and
|
||||
\l{QApplication#stylesheet}{stylesheets}.
|
||||
\l{Qt Style Sheets}{stylesheets}.
|
||||
The styling is only applied during the current session.
|
||||
|
||||
Exercise caution when applying styles, as overriding the existing styling
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage {Qt Creator Manual}
|
||||
\previouspage creator-project-wizards.html
|
||||
\previouspage creator-project-wizards-xml.html
|
||||
\page creator-version-control.html
|
||||
\nextpage creator-configuring-projects.html
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
\b {Has a reported issue been addressed?}
|
||||
|
||||
You can look up any issue in the
|
||||
\l{http://bugreports.qt-project.org/}{Qt bug tracker}.
|
||||
\l{https://bugreports.qt.io/}{Qt bug tracker}.
|
||||
|
||||
\include widgets/creator-faq-qtdesigner.qdocinc
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
bugs.
|
||||
|
||||
For a list of fixed issues and added features, see the changelog file in
|
||||
the \c{qtcreator\dist} folder or the \l{http://bugreports.qt-project.org}
|
||||
the \c{qtcreator\dist} folder or the \l{https://bugreports.qt.io}
|
||||
{Qt Bug Tracker}.
|
||||
|
||||
\section1 General Issues
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
\li Qt 4.7.4 is known to contain a bug exposed by g++ 4.6 which triggers
|
||||
a crash in \QC. For more information, see
|
||||
\l{http://bugreports.qt-project.org/browse/QTBUG-21265}{QTBUG-21265}
|
||||
\l{https://bugreports.qt.io/browse/QTBUG-21265}{QTBUG-21265}
|
||||
|
||||
\li The Okteta KDE custom widget plugin might be installed as part of
|
||||
some Linux distributions. It can cause Qt Designer to crash. For
|
||||
@@ -67,7 +67,7 @@
|
||||
\li \l{http://bugs.launchpad.net/ubuntu/+source/kdeutils/+bug/662005}
|
||||
{Ubuntu bug 662005}
|
||||
|
||||
\li \l{http://bugreports.qt-project.org/browse/QTBUG-12025}
|
||||
\li \l{https://bugreports.qt.io/browse/QTBUG-12025}
|
||||
{QTBUG-12025}
|
||||
|
||||
\endlist
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
Qt provides support for integration with OpenGL implementations on all
|
||||
platforms, which allows you to display hardware accelerated 3D graphics
|
||||
alongside a more conventional user interface. For more information, see
|
||||
\l{Qt Gui#opengl-and-opengl-es-integration}{OpenGL and OpenGL ES integration}.
|
||||
\l{Qt GUI}.
|
||||
|
||||
You can use the QOpenGLShader class to compile OpenGL shaders written in the
|
||||
OpenGL Shading Language (GLSL) and in the OpenGL/ES Shading Language
|
||||
|
||||
686
doc/src/projects/creator-projects-custom-wizards-json.qdoc
Normal file
686
doc/src/projects/creator-projects-custom-wizards-json.qdoc
Normal file
@@ -0,0 +1,686 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (c) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
**
|
||||
** GNU Free Documentation License
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// **********************************************************************
|
||||
// NOTE: the sections are not ordered by their logical order to avoid
|
||||
// reshuffling the file each time the index order changes (i.e., often).
|
||||
// Run the fixnavi.pl script to adjust the links to the index order.
|
||||
// **********************************************************************
|
||||
|
||||
/*!
|
||||
\contentspage {Qt Creator Manual}
|
||||
\previouspage creator-project-wizards.html
|
||||
\page creator-project-wizards-json.html
|
||||
\nextpage creator-project-wizards-xml.html
|
||||
|
||||
\title Adding JSON-Based Wizards
|
||||
|
||||
\image qtcreator-new-qt-gui-application.png
|
||||
|
||||
The JSON-based wizards are displayed in the \uicontrol New dialog. To
|
||||
customize them, copy a directory that contains a wizard.json file in
|
||||
\c {share/qtcreator/templates/wizards/} and modify it to fit your needs.
|
||||
After you run qmake and restart \QC, the wizard name appears in the
|
||||
selected or added category. For each wizard, an icon, a display name, and
|
||||
a description are displayed.
|
||||
|
||||
JSON-based wizard template directories contain a JSON configuration file
|
||||
called wizard.json and the template files. The configuration file contains
|
||||
sections that specify information about the wizard, variables that you can
|
||||
use, wizard pages, and generators for creating files.
|
||||
|
||||
\section1 Using Variables in Wizards
|
||||
|
||||
You can use variables (\c %{<variableName>}) in the configuration and
|
||||
template source files. A set of variables is predefined by the wizards and
|
||||
their pages. You can introduce new variables as shortcuts to be used later.
|
||||
Define the variable key names and values in the \c options section in the
|
||||
.json file.
|
||||
|
||||
The variables always return strings. In places where a boolean value is
|
||||
expected and a string is given, an empty string is treated as \c false and
|
||||
anything else as \c true. A common pitfall is that a string containing
|
||||
\c "false" is not empty and is therefore treated as the value \c true when
|
||||
converted to a boolean value. To avoid this pitfall, use the following type
|
||||
of construction:
|
||||
|
||||
\code
|
||||
{"condition": "%{JS: ('%{VersionControl}' === 'G.Git') ? 'yes' : ''}"
|
||||
\endcode
|
||||
|
||||
\section1 Localizing Wizards
|
||||
|
||||
If a setting name starts with the \c tr prefix, the value is visible to
|
||||
users and should be translated. If the new wizard is included in the \QC
|
||||
sources, the translatable strings appear in the \QC translation files and
|
||||
can be translated as a part of \QC. Alternatively, you can place the
|
||||
translations in the .json file using the following syntax:
|
||||
|
||||
\code
|
||||
"trDisplayName": { "C": "default", "en_US": "english", "de_DE": "deutsch" }
|
||||
\endcode
|
||||
|
||||
For example:
|
||||
|
||||
\code
|
||||
"trDisplayName": { "C": "Project Location", "en_US": "Project Location", "de_DE": "Projekt Verzeichnis" }
|
||||
\endcode
|
||||
|
||||
\section1 Creating Wizards
|
||||
|
||||
\QC contains wizards for adding classes, files, and projects. You can
|
||||
use them as basis for adding your own wizards. We use the C++ wizard
|
||||
to explain the process and the sections and settings in the .json file.
|
||||
|
||||
\image qtcreator-cpp-class-wizard.png
|
||||
|
||||
For more information about the pages and widgets that you can add, see
|
||||
\l {Available Pages} and \l{Available Widgets}.
|
||||
|
||||
To create a JSON-based C++ class wizard:
|
||||
|
||||
\list 1
|
||||
|
||||
\li Make a copy of \c {share/qtcreator/templates/wizards/classes/cpp}
|
||||
and rename it.
|
||||
|
||||
\li Right-click the project name in \uicontrol Projects and select
|
||||
\uicontrol {Run qmake} to register the new wizard. Basically, qmake
|
||||
generates a fixed list of files to copy. Therefore, you need to run
|
||||
qmake each time the names or locations of the files change.
|
||||
|
||||
\li Open the wizard configuration file, \c wizard.json for editing:
|
||||
|
||||
\list
|
||||
|
||||
\li The following settings determine the type of the wizard and
|
||||
its place in the \uicontrol New dialog:
|
||||
|
||||
\code
|
||||
"version": 1,
|
||||
"kind": "class",
|
||||
"id": "A.Class",
|
||||
"category": "O.C++",
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c version is the version of the file contents. Do not
|
||||
modify this value.
|
||||
|
||||
\li \c kind specifies the type of the wizard: \c class,
|
||||
\c file, or \c project.
|
||||
|
||||
\li \c id is the unique identifier for your wizard. You can
|
||||
use a leading letter to specify the position of the
|
||||
wizard within the \c category.
|
||||
|
||||
\li \c category is the category in which to place the wizard
|
||||
in the list. You can use a leading letter to specify the
|
||||
position of the category in the list in the
|
||||
\uicontrol New dialog.
|
||||
|
||||
\li \c disabled is set to to \c true to hide the wizard. By
|
||||
default, it is set to \c{false}.
|
||||
\endlist
|
||||
|
||||
\li The following settings specify the icon and text that appear in
|
||||
the \uicontrol New dialog:
|
||||
|
||||
\code
|
||||
"trDescription": "Creates a C++ header and a source file for a new class that you can add to a C++ project.",
|
||||
"trDisplayName": "C++ Class",
|
||||
"trDisplayCategory": "C++",
|
||||
"icon": "../../global/genericfilewizard.png",
|
||||
"featuresRequired": [ "Plugin.CppEditor" ],
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c trDescription appears in the right-most panel when
|
||||
\c trDisplayCategory is selected.
|
||||
|
||||
\li \c trDisplayName appears in the middle panel when
|
||||
\c trDisplayCategory is selected.
|
||||
|
||||
\li \c trDisplayCategory appears in the \uicontrol New dialog,
|
||||
under \uicontrol Projects.
|
||||
|
||||
\li \c icon appears next to the \c trDisplayName in the middle
|
||||
panel when \c trDisplayCategory is selected. We recommend
|
||||
that you specify the path relative to the wizard.json file,
|
||||
but you can also use an absolute path.
|
||||
|
||||
\li \c featuresRequired specifies the \QC features that the
|
||||
wizard depends on. If a required feature is missing, the
|
||||
wizard is hidden. For example, if the CppEditor plugin is
|
||||
disabled, the C++ Class wizard is hidden.
|
||||
|
||||
\li \c featuresPreferred specifies the build and run kits to
|
||||
preselect.
|
||||
|
||||
\li \c platformIndependent is set to \c true if the wizard is
|
||||
supported by all target platforms. By default, it is set to
|
||||
\c{false}.
|
||||
|
||||
\endlist
|
||||
|
||||
\li The \c options section contains an array of objects with \e key
|
||||
and \e value attributes. You can define your own variables to
|
||||
use in the configuration and template source files, in addition
|
||||
to the predefined variables. For example, the following
|
||||
variables are used in the C++ class creation wizard:
|
||||
|
||||
\code
|
||||
"options":
|
||||
[
|
||||
{ "key": "TargetPath", "value": "%{Path}" },
|
||||
{ "key": "HdrPath", "value": "%{Path}/%{HdrFileName}" },
|
||||
{ "key": "SrcPath", "value": "%{Path}/%{SrcFileName}" },
|
||||
{ "key": "CN", "value": "%{JS: Cpp.className('%{Class}')}" },
|
||||
{ "key": "Base", "value": "%{JS: ( '%{BaseCB}' === '' ) ? '%{BaseEdit}' : '%{BaseCB}'}" },
|
||||
{ "key": "isQObject", "value": "%{JS: ('%{Base}' === 'QObject' || '%{Base}' === 'QWidget' || '%{Base}' === 'QMainWindow' || '%{Base}' === 'QDeclarativeItem' || '%{Base}' === 'QQuickItem' ) ? 'yes' : ''}" },
|
||||
{ "key": "GUARD", "value": "%{JS: Cpp.classToHeaderGuard('%{Class}', '%{JS: Util.preferredSuffix('text/x-c++hdr')}')}" },
|
||||
{ "key": "SharedDataInit", "value": "%{JS: ('%{IncludeQSharedData}') ? 'data(new %{CN}Data)' : '' }" }
|
||||
],
|
||||
\endcode
|
||||
|
||||
This section is optional. For more examples of variables, see
|
||||
the wizard.json files for other wizards.
|
||||
|
||||
\li The \c pages section specifies the wizard pages. The pages
|
||||
used depend on the wizard type. You can add standard pages to
|
||||
wizards or create new pages using the available widgets. The
|
||||
following settings specify the display name, title, and type of
|
||||
the page:
|
||||
|
||||
\code
|
||||
"pages":
|
||||
[
|
||||
{
|
||||
"trDisplayName": "Define Class",
|
||||
"trShortTitle": "Details",
|
||||
"typeId": "Fields",
|
||||
"data" :
|
||||
[
|
||||
{
|
||||
"name": "Class",
|
||||
"trDisplayName": "Class name:",
|
||||
"mandatory": true,
|
||||
"type": "LineEdit",
|
||||
"data": { "validator": "(?:(?:[a-zA-Z_][a-zA-Z_0-9]*::)+[a-zA-Z_][a-zA-Z_0-9]*|)" }
|
||||
},
|
||||
...
|
||||
]
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c typeId specifies the page to use: \c Fields, \c File,
|
||||
\c Form, \c Kits, \c Project, or \c Summary. Full page
|
||||
ID, as used in the code, consists of the \c typeId
|
||||
prefixed with \c {"PE.Wizard.Page."}. For more
|
||||
information, about the pages, see \l{Available Pages}.
|
||||
|
||||
\li \c trDisplayName specifies the title of the page. By
|
||||
default, the page title is used.
|
||||
|
||||
\li \c trShortTitle specifies the title used in the sidebar
|
||||
of the Wizard. By default, the page title is used.
|
||||
|
||||
\li \c trSubTitle specifies the subtitle of the page. By
|
||||
default, the page title is used.
|
||||
|
||||
\li \c index is an integer value that specifies the page ID.
|
||||
It is automatically assigned if you do not set it.
|
||||
|
||||
\li \c enabled is set to \c true to show the page and to
|
||||
\c false to hide it.
|
||||
|
||||
\li \c data specifies the wizard pages. In the C++ wizard,
|
||||
it specifies a \c Fields page and a \c Summary page. The
|
||||
\c Fields page contains the \c CheckBox, \c ComboBox,
|
||||
\c LineEdit, \c PathChooser, and \c Spacer widgets. For
|
||||
more information about the widgets, see
|
||||
\l{Available Widgets}.
|
||||
|
||||
\endlist
|
||||
|
||||
\li The \c generators section specifies the files to be added to the
|
||||
project:
|
||||
|
||||
\code
|
||||
"generators":
|
||||
[
|
||||
{
|
||||
"typeId": "File",
|
||||
"data":
|
||||
[
|
||||
{
|
||||
"source": "file.h",
|
||||
"target": "%{HdrPath}",
|
||||
"openInEditor": true
|
||||
},
|
||||
{
|
||||
"source": "file.cpp",
|
||||
"target": "%{SrcPath}",
|
||||
"openInEditor": true
|
||||
}
|
||||
]
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c typeId specifies the type of the generator. Currently,
|
||||
only \c File is supported.
|
||||
|
||||
\li \c data spefices the files to generate. For a each file
|
||||
to be generated, specify the following values:
|
||||
|
||||
\list
|
||||
|
||||
\li \c source specifies the path and filename of the
|
||||
template file relative to the wizard.json file.
|
||||
|
||||
\li \c target specifies the location of the generated
|
||||
file, either absolute or relative to
|
||||
\c %{TargetPath}, which is usually set by one of the
|
||||
wizard pages.
|
||||
|
||||
\li \c openInEditor opens the file in the appropriate
|
||||
editor if it is set to \c{true}.
|
||||
|
||||
\li \c openAsProject opens the project file in \QC if it
|
||||
is set to \c{true}.
|
||||
|
||||
\li \c condition generates the file if the condition
|
||||
returns \c{true}. For more information, see
|
||||
\l{Using Variables in Wizards}.
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Available Pages
|
||||
|
||||
You can add predefined pages to wizards by specifying them in the \c pages
|
||||
section of a wizard.json file.
|
||||
|
||||
\section2 Field Page
|
||||
|
||||
A Field page has the \c typeId value \c Field and contains widgets. For more
|
||||
information about widget definitions, see \l{Available Widgets}.
|
||||
|
||||
\code
|
||||
"pages":
|
||||
[
|
||||
{
|
||||
"trDisplayName": "Define Class",
|
||||
"trShortTitle": "Details",
|
||||
"typeId": "Fields",
|
||||
"data" :
|
||||
[
|
||||
{
|
||||
"name": "Class",
|
||||
"trDisplayName": "Class name:",
|
||||
"mandatory": true,
|
||||
"type": "LineEdit",
|
||||
"data": { "validator": "(?:(?:[a-zA-Z_][a-zA-Z_0-9]*::)+[a-zA-Z_][a-zA-Z_0-9]*|)" }
|
||||
},
|
||||
...
|
||||
],
|
||||
\endcode
|
||||
|
||||
\section2 File Page
|
||||
|
||||
A File page has the \c typeId value \c File. You can leave out the \c data
|
||||
key or assign an empty object to it.
|
||||
|
||||
\code
|
||||
{
|
||||
"trDisplayName": "Location",
|
||||
"trShortTitle": "Location",
|
||||
"typeId": "File"
|
||||
},
|
||||
\endcode
|
||||
|
||||
The page evaluates \c InitialFileName and \c InitialPath from the wizard to
|
||||
set the initial path and filename. The page sets \c TargetPath to the full
|
||||
path of the file to be created.
|
||||
|
||||
\section2 Form Page
|
||||
|
||||
A Form page has the \c typeId value \c Form. You can leave out the \c data
|
||||
key or assign an empty object to it.
|
||||
|
||||
\code
|
||||
{
|
||||
"trDisplayName": "Choose a Form Template",
|
||||
"trShortTitle": "Form Template",
|
||||
"typeId": "Form"
|
||||
},
|
||||
\endcode
|
||||
|
||||
The page sets \c FormContents to an array of strings with the form contents.
|
||||
|
||||
\section2 Kits
|
||||
|
||||
A Kits page has the \c typeId value \c Kits. The \c data section of a Kits
|
||||
page contains an object with the field \c projectFilePath set.
|
||||
|
||||
\code
|
||||
{
|
||||
"trDisplayName": "Kit Selection",
|
||||
"trShortTitle": "Kits",
|
||||
"typeId": "Kits",
|
||||
"enabled": "%{IsTopLevelProject}",
|
||||
"data": { "projectFilePath": "%{ProFileName}" }
|
||||
},
|
||||
\endcode
|
||||
|
||||
The page evaluates \c Platform to set the platform selected in
|
||||
\uicontrol File > \uicontrol New, \c PreferredFeatures to set the preferred
|
||||
features for the project, and \c RequiredFeatures to set the required
|
||||
features for the project. The feature set is used to determine which kits to
|
||||
display and pre-select for the project.
|
||||
|
||||
\section2 Project
|
||||
|
||||
A Project page has the \c typeId value \c Project. It contains no data or an
|
||||
empty object.
|
||||
|
||||
\code
|
||||
{
|
||||
"trDisplayName": "Project Location",
|
||||
"trShortTitle": "Location",
|
||||
"typeId": "Project"
|
||||
},
|
||||
\endcode
|
||||
|
||||
The page evaluates \c InitialPath to set the initial project path. The page
|
||||
sets \c ProjectDirectory and \c TargetPath to the project directory.
|
||||
|
||||
\section2 Summary
|
||||
|
||||
A Summary page has the \c typeId value \c Summary. It contains no data or
|
||||
an empty object.
|
||||
|
||||
\code
|
||||
{
|
||||
"trDisplayName": "Project Management",
|
||||
"trShortTitle": "Summary",
|
||||
"typeId": "Summary"
|
||||
}
|
||||
\endcode
|
||||
|
||||
The page sets \c IsSubproject to an empty string if this is a toplevel
|
||||
project and to \c yes otherwise. It sets \c VersionControl to the ID of the
|
||||
version control system in use.
|
||||
|
||||
\section1 Available Widgets
|
||||
|
||||
You can add the following widgets on a Field page:
|
||||
|
||||
\list
|
||||
\li Check Box
|
||||
\li Combo Box
|
||||
\li Label
|
||||
\li Line Edit
|
||||
\li Path Chooser
|
||||
\li Spacer
|
||||
\li Text Edit
|
||||
\endlist
|
||||
|
||||
Specify the following settings for each widget:
|
||||
|
||||
\list
|
||||
|
||||
\li \c name specifies the widget name. This name is used as the variable
|
||||
name to access the value again.
|
||||
|
||||
\li \c trDisplayName specifies the label text visible in the UI (if
|
||||
\c span is not \c true).
|
||||
|
||||
\li \c type specifies the type of the widget: \c CheckBox, \c ComboBox,
|
||||
\c Label, \c LineEdit, \c PathChooser, \c Spacer, and \c TextEdit.
|
||||
|
||||
\li \c data specifies settings for the widget:
|
||||
|
||||
\list
|
||||
|
||||
\li \c visible is set to \c true if the widget is visible, otherwise
|
||||
it is set to \c false. By default, it is set to \c true.
|
||||
|
||||
\li \c enabled is set to \c true if the widget is enabled, otherwise
|
||||
it is set to \c false. By default, it is set to \c true.
|
||||
|
||||
\li \c mandatory is set to \c true if this widget must have a value
|
||||
for the \uicontrol Next button to become enabled. By default, it
|
||||
is set to \c true.
|
||||
|
||||
\li \c span is set to hide the label and to span the form. By
|
||||
default, it is set to \c false. For more information, see
|
||||
\l{Using Variables in Wizards}.
|
||||
|
||||
\endlist
|
||||
|
||||
The additional settings available for a particular widget are described
|
||||
in the following sections.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Check Box
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "IncludeQObject",
|
||||
"trDisplayName": "Include QObject",
|
||||
"type": "CheckBox",
|
||||
"data":
|
||||
{
|
||||
"checkedValue": "QObject",
|
||||
"uncheckedValue": "",
|
||||
"checked": "%{JS: ('%{BaseCB}' === 'QObject' ) ? 'yes' : ''}"
|
||||
}
|
||||
},
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c checkedValue specifies the value to set when the check box is
|
||||
enabled. By default, set to \c 0.
|
||||
|
||||
\li \c uncheckedValue specifies the value to set when the check box is
|
||||
disabled. By default, set to \c 1.
|
||||
|
||||
\li \c checked is set to \c true if the check box is enabled, otherwise
|
||||
\c{false}.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Combo Box
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "BaseCB",
|
||||
"trDisplayName": "Base class:",
|
||||
"type": "ComboBox",
|
||||
"data":
|
||||
{
|
||||
"items": [ { "trKey": "<Custom>", "value": "" },
|
||||
"QObject", "QWidget", "QMainWindow", "QDeclarativeItem", "QQuickItem" ]
|
||||
}
|
||||
},
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c items specifies a list of items to put into the combo box. The
|
||||
list can contain both JSON objects and plain strings. For JSON
|
||||
objects, define \c trKey and \c value pairs, where the \c trKey is
|
||||
the list item visible to users and \c value contains the data
|
||||
associated with the item.
|
||||
|
||||
\li \c index specifies the index to select when the combo box is
|
||||
enabled. By default, it is set to \c 0.
|
||||
|
||||
\li \c disabledIndex specifies the index to show if the combo box is
|
||||
disabled.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Label
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "LabelQQC_1_0",
|
||||
"type": "Label",
|
||||
"span": true,
|
||||
"visible": "%{( '%{CS}' === 'QQC_1_0' ) ? 'yes' : ''}",
|
||||
"data":
|
||||
{
|
||||
"wordWrap": true,
|
||||
"trText": "Creates a deployable Qt Quick 2 application using Qt Quick Controls. Requires Qt 5.1 or newer."
|
||||
}
|
||||
},
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c wordWrap is set to \c true to enable word wrap. By default, it is
|
||||
set to \c{false}.
|
||||
|
||||
\li \c trText contains the label text to display.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Line Edit
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "Class",
|
||||
"trDisplayName": "Class name:",
|
||||
"mandatory": true,
|
||||
"type": "LineEdit",
|
||||
"data": { "validator": "(?:(?:[a-zA-Z_][a-zA-Z_0-9]*::)+[a-zA-Z_][a-zA-Z_0-9]*|)" }
|
||||
},
|
||||
{
|
||||
"name": "BaseEdit",
|
||||
"type": "LineEdit",
|
||||
"enabled": "%{JS: ( '%{BaseCB}' === '' ) ? 'yes' : ''}",
|
||||
"mandatory": false,
|
||||
"data":
|
||||
{
|
||||
"trText": "%{BaseCB}",
|
||||
"trDisabledText": "%{BaseCB}"
|
||||
}
|
||||
},
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c trText specifies the default text to display.
|
||||
|
||||
\li \c trDisabledText specifies the text to display in a disabled field.
|
||||
|
||||
\li \c trPlaceholder specifies the placeholder text.
|
||||
|
||||
\li \c validator specifies a QRegularExpression to validate the line
|
||||
edit against.
|
||||
|
||||
\li \c fixup specifies a variable that is used to fix up the string.
|
||||
For example, to turn the first character in the line edit to upper
|
||||
case.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Path Chooser
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "Path",
|
||||
"type": "PathChooser",
|
||||
"trDisplayName": "Path:",
|
||||
"mandatory": true,
|
||||
"data":
|
||||
{
|
||||
"kind": "existingDirectory",
|
||||
"basePath": "%{InitialPath}",
|
||||
"path": "%{InitialPath}"
|
||||
}
|
||||
},
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c path specifies the selected path.
|
||||
|
||||
\li \c basePath specifies a base path that lookups are relative to.
|
||||
|
||||
\li \c kind defines what to look for: \c existingDirectory,
|
||||
\c directory, \c file, \c saveFile, \c existingCommand, \c command,
|
||||
or \c any.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Spacer
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "Sp1",
|
||||
"type": "Spacer",
|
||||
"data":
|
||||
{
|
||||
"factor": 2
|
||||
}
|
||||
},
|
||||
\endcode
|
||||
|
||||
The \c factor setting specifies the factor (an integer) to multiply the
|
||||
layout spacing for this spacer.
|
||||
|
||||
\section2 Text Edit
|
||||
|
||||
\code
|
||||
{
|
||||
"name": "TextField",
|
||||
"type": "TextEdit",
|
||||
"data" :
|
||||
{
|
||||
"trText": "This is some text",
|
||||
"richText": true
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c trText specifies the text to display.
|
||||
|
||||
\li \c trDisabledText specifies the text to display when the text edit
|
||||
is disabled.
|
||||
|
||||
\li \c richText is set to \c true for rich text, otherwise \c{false}.
|
||||
|
||||
\endlist
|
||||
|
||||
*/
|
||||
637
doc/src/projects/creator-projects-custom-wizards-xml.qdoc
Normal file
637
doc/src/projects/creator-projects-custom-wizards-xml.qdoc
Normal file
@@ -0,0 +1,637 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (c) 2014 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of Qt Creator
|
||||
**
|
||||
**
|
||||
** GNU Free Documentation License
|
||||
**
|
||||
** 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.
|
||||
**
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
// **********************************************************************
|
||||
// NOTE: the sections are not ordered by their logical order to avoid
|
||||
// reshuffling the file each time the index order changes (i.e., often).
|
||||
// Run the fixnavi.pl script to adjust the links to the index order.
|
||||
// **********************************************************************
|
||||
|
||||
/*!
|
||||
\contentspage {Qt Creator Manual}
|
||||
\previouspage creator-project-wizards-json.html
|
||||
\page creator-project-wizards-xml.html
|
||||
\nextpage creator-version-control.html
|
||||
|
||||
\title Adding XML-Based Wizards
|
||||
|
||||
To display the XML-based example wizards in \QC, rename wizard_sample.xml as wizard.xml in the
|
||||
\c {\share\qtcreator\templates\wizards\helloworld} and
|
||||
\c {\share\qtcreator\templates\wizards\listmodel} folders. After
|
||||
you restart \QC, the \uicontrol {Custom Classes}
|
||||
and \uicontrol {Custom Projects} categories (1) appear in the \uicontrol New dialog. For
|
||||
each category, an icon (2), a display name (3), and a description (4) are
|
||||
displayed.
|
||||
|
||||
\image qtcreator-custom-project-wizards.png "The New dialog with custom projects and classes"
|
||||
|
||||
Files can be generated by using either \l{Processing Template Files}
|
||||
{templates} or \l{Using Generator Scripts}{generator scripts}, where a
|
||||
script is called to create the files.
|
||||
|
||||
\note The generator option mainly exists to accommodate existing generator
|
||||
scripts or cases where complicated algorithmic logic is required when
|
||||
generating files. Writing cross-platform scripts is inherently difficult,
|
||||
and therefore, it is not recommended for new wizards.
|
||||
|
||||
XML-based wizard template directories contain an XML configuration file
|
||||
called wizard.xml, the template source files, and optionally, the generator
|
||||
script.
|
||||
|
||||
\section1 Creating XML-Based Project Wizards
|
||||
|
||||
To create an XML-based project wizard:
|
||||
|
||||
\list 1
|
||||
|
||||
\li Make a copy of the \c {share/qtcreator/templates/wizards/helloworld}
|
||||
or \c {share/qtcreator/templates/wizards/listmodel} folder.
|
||||
|
||||
\li Modify the wizard_example.xml file.
|
||||
|
||||
\li The following code determines the type of the wizard and its place
|
||||
in the \uicontrol New dialog:
|
||||
|
||||
\code
|
||||
|
||||
<wizard version="1" kind="project"
|
||||
class="qmakeproject" firstpage="10"
|
||||
id="A.HelloWorld" category="B.CustomProjects">
|
||||
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c version is the version of the file contents. Do not modify
|
||||
this value.
|
||||
|
||||
\li \c kind specifies the type of the wizard: \c project or
|
||||
\c class.
|
||||
|
||||
\li \c class specifies the type of the project. This attribute is
|
||||
optional. Use the value \c qmakeproject to add Qt specific pages.
|
||||
|
||||
\li \c firstpage specifies the place of the new page in the standard
|
||||
project wizard. The value 10 ensures that the custom page
|
||||
appears after the standard pages, as the last page of the
|
||||
wizard.
|
||||
|
||||
\li \c id is the unique identifier for your wizard. The letter
|
||||
specifies the position of the wizard within the \c category. The
|
||||
HelloWorld wizard appears as the first wizard in the second
|
||||
category in the \uicontrol New dialog.
|
||||
|
||||
\li \c category is the category in which to place the wizard in the
|
||||
list. The letter specifies the position of the category in the
|
||||
list in the \uicontrol New dialog.
|
||||
|
||||
\endlist
|
||||
|
||||
\li The following code specifies the icon and text that appear in the
|
||||
\uicontrol New dialog:
|
||||
|
||||
\code
|
||||
|
||||
<icon>console.png</icon>
|
||||
<description>Creates a hello-world-project with custom message.</description>
|
||||
<description xml:lang="de">Erzeugt ein Hello-Welt-Projekt mit einer Nachricht.</description>
|
||||
<displayname>Hello World</displayname>;
|
||||
<displayname xml:lang="de">Hallo Welt</displayname>;
|
||||
<displaycategory>Custom Projects</displaycategory>
|
||||
<displaycategory xml:lang="de">Benutzerdefinierte Projekte</displaycategory>
|
||||
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c displayCategory appears in the \uicontrol New dialog, under
|
||||
\uicontrol Projects.
|
||||
|
||||
\li \c icon appears next to the \c displayName in the middle panel
|
||||
when \c displayCategory is selected.
|
||||
|
||||
\li \c description appears in the right-most panel when
|
||||
\c displayCategory is selected.
|
||||
|
||||
You can add translations as values for the text elements. Specify the target
|
||||
language as an attribute for the element. Use locale names (QLocale).
|
||||
For example, \c {xml:lang="de"}.
|
||||
|
||||
\endlist
|
||||
|
||||
\li Files to be added to the project:
|
||||
|
||||
\list
|
||||
|
||||
\li Template-based: The following code specifies the files to add to
|
||||
the project:
|
||||
\code
|
||||
<files>
|
||||
<file source="main.cpp" openeditor="true" />
|
||||
<file source="project.pro" target="%ProjectName%.pro" openproject="true" />
|
||||
<file source="icon.png" target="%ProjectName%.png" binary="true" />
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c source specifies the file to copy to the project. The
|
||||
files must be located in the wizard folder.
|
||||
|
||||
\li \c openeditor indicates that the file is to be opened in an
|
||||
editor after the wizard has finished.
|
||||
|
||||
\li \c binary indicates that the file is a binary file (for
|
||||
example, an image file). It is to be copied to the target
|
||||
folder as is. Placeholders are not replaced with values.
|
||||
|
||||
\li \c target specifies the new filename for the file. The
|
||||
\c {%ProjectName%} variable is replaced with the string that
|
||||
users specify in the \uicontrol Name field on the first page of
|
||||
the wizard.
|
||||
|
||||
\li \c openproject indicates that the file is a project file
|
||||
which is to be opened after the wizard has finished.
|
||||
|
||||
\endlist
|
||||
|
||||
See also \l{Processing Template Files}.
|
||||
|
||||
\li Generator-script: The following code specifies that the script
|
||||
\c generate.pl is to be used to create the files:
|
||||
|
||||
\code
|
||||
<generatorscript binary="generate.pl">
|
||||
<argument value="--class-name=%ClassName%"/>
|
||||
<argument value="--project-name=%ProjectName%"/>
|
||||
<argument value="--header-suffix=%CppHeaderSuffix%" omit-empty="true"/>
|
||||
<argument value="--source-suffix=%CppSourceSuffix%" omit-empty="true"/>
|
||||
<argument value="--description=%Description%" omit-empty="true" write-file="true"/>
|
||||
</generatorscript>
|
||||
\endcode
|
||||
|
||||
In each argument, the field placeholders are replaced by the
|
||||
field values. There are additional boolean attributes which give
|
||||
fine-grained control:
|
||||
|
||||
\list
|
||||
|
||||
\li \c omit-empty specifies that complete argument is to be
|
||||
omitted when all placeholders expand to empty values. In
|
||||
the above example, the option \c --source-suffix will
|
||||
not be passed to the script if the value is empty.
|
||||
|
||||
\li \c write-file indicates that instead of the expanded
|
||||
value, the value will be written to a temporary file and
|
||||
its file name will be passed to the script instead. This
|
||||
is useful for multi-line text fields.
|
||||
|
||||
\endlist
|
||||
|
||||
See also \l{Using Generator Scripts}.
|
||||
|
||||
\endlist
|
||||
|
||||
\li The following code creates a page that specifies settings for the project:
|
||||
|
||||
\code
|
||||
<!-- Create a 2nd wizard page with parameters -->
|
||||
<fieldpagetitle>Hello World Parameters</fieldpagetitle>
|
||||
<fieldpagetitle xml:lang="de">Hallo Welt Parameter</fieldpagetitle>
|
||||
<fields>
|
||||
<field mandatory="true" name="MESSAGE">
|
||||
<fieldcontrol class="QLineEdit" validator='^[^"]+$' defaulttext="Hello world!" placeholdertext="Enter a message"/>
|
||||
<fielddescription>Hello world message:</fielddescription>
|
||||
<fielddescription xml:lang="de">Hallo-Welt-Nachricht:</fielddescription>
|
||||
</field>
|
||||
</fields>
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c fieldpagetitle specifies the title of the page.
|
||||
|
||||
\li \c fields specifies the user interface objects on the page.
|
||||
|
||||
\li \c field specifies one object. You can use a set of interface objects
|
||||
from QtWidgets classes, derived from QWidget, to create fields. This example
|
||||
uses QLineEdit to create an input field. For more information about the objects
|
||||
that you can add, see \l {Supported Widgets}.
|
||||
|
||||
\li \c mandatory specifies whether the field is mandatory (\c true or
|
||||
\c false). For more information, see QWizardPage::registerField().
|
||||
|
||||
\li \c name specifies a name that you can use as a placeholder variable in the
|
||||
template file (for example, \c {%MESSAGE%}).
|
||||
|
||||
\li \c class specifies the type of the \c fieldcontrol. The XML attributes that you
|
||||
can specify for the field depend on the field type.
|
||||
|
||||
\li For a QLineEdit, \c validator specifies a regular expression to check the
|
||||
characters allowed in the field.
|
||||
|
||||
\li \c defaulttext specifies text that appears in the field by
|
||||
default.
|
||||
|
||||
\li For a QLineEdit, \c placeholdertext specifies placeholder text that appears in the
|
||||
field.
|
||||
|
||||
\li \c fielddescription specifies the field name that appears on the
|
||||
wizard page.
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Creating Class Wizards
|
||||
|
||||
The wizard.xml file for a class wizard is very similar to that for a project
|
||||
wizard. The differences are discussed below.
|
||||
|
||||
To create a class wizard:
|
||||
|
||||
\list 1
|
||||
|
||||
\li The following code specifies settings for the wizard:
|
||||
|
||||
\code
|
||||
|
||||
<wizard version="1" kind="class" id="A.ListModel" category="B.CustomClasses">
|
||||
|
||||
<description>Creates a QAbstractListModel implementation.</description>
|
||||
<description xml:lang="de">Erzeugt eine Implementierung von QAbstractListModel.</description>
|
||||
|
||||
<displayname>QAbstractListModel implementation</displayname>
|
||||
<displayname xml:lang="de">Implementierung von QAbstractListModel</displayname>
|
||||
|
||||
<displaycategory>Custom Classes</displaycategory>
|
||||
<displaycategory xml:lang="de">Benutzerdefinierte Klassen</displaycategory>
|
||||
|
||||
\endcode
|
||||
|
||||
For more information about the elements and their values, see
|
||||
\l {Creating XML-Based Project Wizards}.
|
||||
|
||||
\li The following code specifies the files to add to the project:
|
||||
|
||||
\code
|
||||
|
||||
<files>
|
||||
<file source="listmodel.cpp" target="%ClassName:l%.%CppSourceSuffix%" openeditor="true" />
|
||||
<file source="listmodel.h" target="%ClassName:l%.%CppHeaderSuffix%" openeditor="true" />
|
||||
</files>
|
||||
|
||||
\endcode
|
||||
|
||||
Here, \c target contains the following variables that are used to
|
||||
construct the filename:
|
||||
|
||||
\list
|
||||
|
||||
\li \c {%ClassName:l%} is replaced with the value of the
|
||||
\c ClassName field. The modifier \c l converts the string to
|
||||
lower case, to observe Qt conventions.
|
||||
|
||||
\li \c {%CppSourceSuffix%} and \c {%CppHeaderSuffix%} are
|
||||
pre-defined. For more information, see
|
||||
\l{Pre-defined Standard Variables}.
|
||||
|
||||
\endlist
|
||||
|
||||
\code
|
||||
|
||||
<!-- Create parameter wizard page -->
|
||||
|
||||
<fieldpagetitle>ListModel parameters</fieldpagetitle>
|
||||
<fieldpagetitle xml:lang="de">Parameter des ListModel</fieldpagetitle>
|
||||
<fields>
|
||||
<field name="ClassName">
|
||||
|
||||
<fieldcontrol class="QLineEdit" validator="^[a-zA-Z0-9_]+$" defaulttext="MyListModel" />
|
||||
|
||||
<fielddescription>Class name:</fielddescription>
|
||||
<fielddescription xml:lang="de">Klassenname:</fielddescription>
|
||||
</field>
|
||||
<field name="Datatype">
|
||||
<fieldcontrol class="QComboBox" defaultindex="0">
|
||||
<comboentries>
|
||||
<comboentry value="QString">
|
||||
<comboentrytext>class QString</comboentrytext>
|
||||
<comboentrytext xml:lang="de">Klasse QString</comboentrytext>
|
||||
</comboentry>
|
||||
<comboentry value="int">
|
||||
<comboentrytext>Integer</comboentrytext>
|
||||
<comboentrytext xml:lang="de">Ganzzahlwert</comboentrytext>
|
||||
</comboentry>
|
||||
</comboentries>
|
||||
</fieldcontrol>
|
||||
<fielddescription>Data type:</fielddescription>
|
||||
<fielddescription xml:lang="de">Datentyp:</fielddescription>
|
||||
</field>
|
||||
</fields>
|
||||
|
||||
\endcode
|
||||
|
||||
In addition to QLineEdit, QComboBox is used in the class wizard to
|
||||
create a field. Specify the following XML attributes:
|
||||
|
||||
\list
|
||||
|
||||
\li \c defaultindex specifies which comboentry is displayed by default. In the above
|
||||
example, "0" means that the first comboentry is the default value.
|
||||
|
||||
\li \c comboentries specifies the options in the combobox.
|
||||
|
||||
\li \c value specifies the type of each \c comboentry, QString or integer.
|
||||
|
||||
\li \c comboentrytext specifies the text of the entry.
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Supported Widgets
|
||||
|
||||
You can use the following interface objects to create fields in the wizards:
|
||||
|
||||
\list
|
||||
|
||||
\li PathChooser utility to set paths
|
||||
|
||||
\li Check boxes with text labels (QCheckBox)
|
||||
|
||||
\li Combined button and popup lists (QComboBox)
|
||||
|
||||
\li One-line text editors (QLineEdit)
|
||||
|
||||
\li Multi-line rich text editors (QTextEdit)
|
||||
|
||||
\endlist
|
||||
|
||||
Using QLineEdit and QComboBox is described in the previous sections.
|
||||
The following sections show examples of using the other classes and describe the XML
|
||||
attributes that you can specify for the \c fieldcontrol element of a field in a particular
|
||||
\c class.
|
||||
|
||||
\section2 Path Choosers
|
||||
|
||||
\code
|
||||
<field mandatory="true" name="QtCreatorSources">
|
||||
<fieldcontrol class="Utils::PathChooser" defaulttext="" expectedkind="existingdirectory"/>
|
||||
<fielddescription>Qt Creator sources:</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
The \c defaulttext attribute specifies text that appears in the field by default.
|
||||
|
||||
The text attribute \c expectedkind specifies which type of path is expected:
|
||||
|
||||
\list
|
||||
|
||||
\li \c any accepts any kind of path.
|
||||
|
||||
\li \c file expects a file.
|
||||
|
||||
\li \c directory expects a directory.
|
||||
|
||||
\li \c existingdirectory expects an existing directory.
|
||||
|
||||
\li \c command expects an executable file.
|
||||
|
||||
\li \c existingcommand expects an existing, executable file.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Check Boxes
|
||||
|
||||
To make check boxes appear selected by default, set the \c fieldcontrol attribute
|
||||
\c defaultvalue to \c true. Any other value or omitting the attribute makes the check box
|
||||
appear not selected.
|
||||
|
||||
For example:
|
||||
|
||||
\code
|
||||
<field name="CONSOLE">
|
||||
<fieldcontrol class="QCheckBox" defaultvalue="true"/>
|
||||
<fielddescription>Console application</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
For more examples about using check boxes, see \l{Processing Template Files}.
|
||||
|
||||
\section2 Text Editors
|
||||
|
||||
\code
|
||||
<field name="License">
|
||||
<fieldcontrol class="QTextEdit" defaulttext="Put your license text here" />
|
||||
<fielddescription>License:</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
The \c defaulttext attribute specifies text that appears in the field by default.
|
||||
|
||||
The boolean attribute \c acceptRichText sets the property QTextEdit::acceptRichText.
|
||||
It is disabled by default (as opposed to the default value of QTextEdit::acceptRichText)
|
||||
to prevent pasting of rich text with formatting, which is not desirable for code templates.
|
||||
|
||||
\section1 Processing Template Files
|
||||
|
||||
When processing a template source file, placeholders specifying the field
|
||||
names in the format \c{%FIELDNAME%} are replaced by the values entered by
|
||||
the user. In addition, modifier characters are supported. For example,
|
||||
\c{%FIELDNAME:u%} specifies that the value is converted to upper case. This
|
||||
enables generating header guards for C++ header files.
|
||||
|
||||
The following modifier characters are supported:
|
||||
|
||||
\list
|
||||
|
||||
\li \c{l} for lower case.
|
||||
|
||||
\li \c{u} for upper case.
|
||||
|
||||
\li \c{c} for upper case initial letter ("project" > "Project").
|
||||
|
||||
\endlist
|
||||
|
||||
In the \c{helloworld} example, the placeholder \c %NETWORK% is used together with the
|
||||
QCheckBox class. The following line is added to the project file:
|
||||
|
||||
\code
|
||||
%NETWORK%QT += network
|
||||
\endcode
|
||||
|
||||
And the following field is specified in the wizard.xml:
|
||||
|
||||
\code
|
||||
<field name="NETWORK">
|
||||
<fieldcontrol class="QCheckBox" truevalue="" falsevalue="# "/>
|
||||
<fielddescription>Include network module</fielddescription>
|
||||
<fielddescription xml:lang="de">Netzwerk-Modul verwenden</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
If the checkbox is checked, the placeholder is replaced by \c truevalue. If it is not
|
||||
checked, the placeholder is replaced by \c falsevalue.
|
||||
|
||||
You can use conditions to add sections of the file depending on field
|
||||
values. Use a syntax that is similar to C++ preprocessing, as demonstrated
|
||||
in the project file of the \c{helloworld} example:
|
||||
|
||||
\code
|
||||
|
||||
@if "%SCRIPT%" == "true"
|
||||
QT += script
|
||||
@endif
|
||||
|
||||
\endcode
|
||||
|
||||
The value of the Boolean (QCheckBox) field labeled \c{SCRIPT} determines
|
||||
whether the script module is added. The expressions must expand to valid
|
||||
Javascript expressions after field replacement.
|
||||
|
||||
For example, the following field is specified in the wizard.xml:
|
||||
|
||||
\code
|
||||
<field name="SCRIPT">
|
||||
<fieldcontrol class="QCheckBox"/>
|
||||
<fielddescription>Include script module</fielddescription>
|
||||
<fielddescription xml:lang="de">Script-Modul verwenden</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
\section1 Pre-defined Standard Variables
|
||||
|
||||
In addition to the field values entered by the user, you can use
|
||||
the following pre-defined standard values:
|
||||
|
||||
\list
|
||||
|
||||
\li \c {%ProjectName%} is replaced by the name of the project in the
|
||||
case of project wizards.
|
||||
|
||||
\li \c {%Path%} is replaced by the path to the target directory. For
|
||||
classes, this is the directory, where the files are created. For
|
||||
project wizards, an additional subdirectory named after the project
|
||||
is created.
|
||||
|
||||
\li \c {%TargetPath%} is replaced by the path to the directory where the
|
||||
actual files are created. For non-project wizards, it is identical
|
||||
to \c %Path%. For project wizards, it is \c %Path%/%ProjectName%.
|
||||
|
||||
\li \c {%CppSourceSuffix%} is replaced by the default source suffix,
|
||||
which is defined in \QC in \uicontrol {Tools > Options > C++ >
|
||||
File Naming}. For example, if users enter \b MyClass, the
|
||||
filename becomes myclass.cpp when the project is created.
|
||||
|
||||
\li \c {%CppHeaderSuffix%} is replaced by the default header suffix,
|
||||
which is also defined in \uicontrol {File Naming}.
|
||||
|
||||
\li \c {%CurrentDate%} is replaced by the current date in the format
|
||||
\c {YYYY-MM-DD} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentTime%} is replaced by the current time in the format
|
||||
\c {HH:MM:SS} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentDate:Locale%} is replaced by the current date in the short format
|
||||
specified by the application's locale.
|
||||
|
||||
\li \c {%CurrentTime:Locale%} is replaced by the current time in the short format
|
||||
specified by the application's locale.
|
||||
|
||||
\li \c {%CurrentDate:ISO%} is replaced by the current date in the format
|
||||
\c {YYYY-MM-DD} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentTime:ISO%} is replaced by the current time in the format
|
||||
\c {HH:MM:SS} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentDate:RFC%} is replaced by the current date in the format
|
||||
\c {DD Mon YYYY}, where \c {Mon} is the three letter month name, as specified by RFC 2822.
|
||||
|
||||
\li \c {%CurrentTime:RFC%} is replaced by the current time in the format
|
||||
\c {HH:MM:SS} as specified by RFC 2822.
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Validating User Input
|
||||
|
||||
You can specify validation rules for user input. The rules consist of a
|
||||
Boolean JavaScript expression and an error message. The placeholders in them
|
||||
are replaced with values before they are evaluated or displayed.
|
||||
|
||||
Consider the following rule used in the \l{Creating Class Wizards} example:
|
||||
|
||||
\code
|
||||
<validationrules>
|
||||
<validationrule condition='"%ClassName%" != "QAbstractListModel"'>
|
||||
<message>%ClassName% cannot be used as class name.</message>
|
||||
<message xml:lang="de">%ClassName% kann nicht als Klassenname verwendet werden.</message>
|
||||
</validationrule>
|
||||
</validationrules>
|
||||
\endcode
|
||||
|
||||
It ensures that the class name entered by the user does not match the name
|
||||
of the base class. If the validation fails, a red label displaying the
|
||||
message appears at the bottom of the wizard page.
|
||||
|
||||
\section1 Using Generator Scripts
|
||||
|
||||
The values entered in the wizard page are passed to the script
|
||||
as command line arguments as defined by the wizard configuration file.
|
||||
|
||||
In addition, the script must implement a \c{--dry-run} command line option.
|
||||
|
||||
\QC needs to know the file names before the files are created to check
|
||||
whether files with identical names already exist, for example. Therefore,
|
||||
script file generation is a two-step process:
|
||||
|
||||
\list 1
|
||||
|
||||
\li Determine file names and attributes: The script is called with the
|
||||
command line \c{--dry-run} option and the field values. It then prints
|
||||
the relative path names of the files it intends to create, followed by
|
||||
comma-separated attributes matching those of the \c{<file>} element, for
|
||||
example:
|
||||
|
||||
\code
|
||||
myclass.cpp,openeditor
|
||||
myclass.h,openeditor
|
||||
myproject.pro,openproject
|
||||
\endcode
|
||||
|
||||
\li Create files: The script is called with the parameters only in the
|
||||
working directory. It then actually creates the files. If directories
|
||||
are needed, the script should create them, too.
|
||||
|
||||
\endlist
|
||||
|
||||
The \c{scriptgeneratedproject} sample wizard illustrates the usage.
|
||||
A typical script invocation for this example (obtained by running \QC with
|
||||
\c{--customwizard-verbose}) looks as follows:
|
||||
|
||||
\code
|
||||
generate.pl --class-name=TestClass --project-name=TestProject --header-suffix=h --source-suffix=cpp --description=/tmp/qtcreatorj26629.txt
|
||||
\endcode
|
||||
|
||||
By default, the scripts are run in the directory corresponding to
|
||||
\c %TargetPath%. This can be overridden by specifying the attribute
|
||||
\c workingdirectory on the element \c generatorscript. For example, if the
|
||||
script creates the project directory by itself, %Path% can be specified. In
|
||||
that case, \c --dry-run should output the correct relative paths or absolute
|
||||
paths constructed using the value of \c %Path%.
|
||||
|
||||
*/
|
||||
@@ -26,17 +26,23 @@
|
||||
\contentspage {Qt Creator Manual}
|
||||
\previouspage creator-project-qmake-libraries.html
|
||||
\page creator-project-wizards.html
|
||||
\nextpage creator-version-control.html
|
||||
\nextpage creator-project-wizards-json.html
|
||||
|
||||
\title Adding New Custom Wizards
|
||||
|
||||
If you have a team working on a large application or several applications,
|
||||
you might want to standardize the way the team members create projects
|
||||
and classes.
|
||||
you might want to standardize the way the team members create projects,
|
||||
classes, and files.
|
||||
|
||||
You can copy the wizard templates in the template folders to create your own
|
||||
project and class wizards. They are displayed in the \uicontrol New dialog that
|
||||
opens when you choose \uicontrol {File > New File or Project}.
|
||||
project, class, and file wizards. They are displayed in the \uicontrol New
|
||||
dialog that opens when you choose \uicontrol {File > New File or Project}.
|
||||
|
||||
A custom wizard defines the user interface of a wizard page. The values the
|
||||
user enters in the wizard are assigned field names. Field name and value
|
||||
pairs are then passed to the file creation process.
|
||||
|
||||
\section1 Wizard Types
|
||||
|
||||
In a project wizard, you can specify the files needed in a project.
|
||||
You can add wizard pages to allow developers to specify settings for the
|
||||
@@ -45,42 +51,41 @@
|
||||
In a class wizard, you can allow developers to specify the class name, base
|
||||
class, and header and source files for the class.
|
||||
|
||||
To see how this works, rename wizard_sample.xml as wizard.xml in the
|
||||
\c {\share\qtcreator\templates\wizards\helloworld} and
|
||||
\c {\share\qtcreator\templates\wizards\listmodel} folders. After
|
||||
you restart \QC, the \uicontrol {Custom Classes}
|
||||
and \uicontrol {Custom Projects} categories (1) appear in the \uicontrol New dialog. For
|
||||
each category, an icon (2), a display name (3), and a description (4) are
|
||||
displayed.
|
||||
In a file wizard, you can allow developers to specify the type and location
|
||||
of the file.
|
||||
|
||||
\image qtcreator-custom-project-wizards.png "The New dialog with custom projects and classes"
|
||||
|
||||
\section1 Overview of Custom Wizards
|
||||
|
||||
A custom wizard defines the user interface of a wizard page. The values the
|
||||
user enters in the wizard are assigned field names. Field name and value
|
||||
pairs are then passed to the file creation process. File creation can happen
|
||||
in the following ways:
|
||||
|
||||
\list 1
|
||||
|
||||
\li Template-based, where source files that contain placeholders for
|
||||
the field names are provided. During processing, the placeholders
|
||||
are replaced by the values from the wizard page. Optionally,
|
||||
modifier characters are applied. For more information, see
|
||||
\l{Processing Template Files}.
|
||||
|
||||
\li Generator script, where a script is called to create the files.
|
||||
|
||||
\note This option mainly exists to accommodate existing generator
|
||||
scripts or cases where complicated algorithmic logic is required
|
||||
when generating files. Writing cross-platform scripts is inherently
|
||||
difficult, and therefore, it is not recommended for new wizards. For
|
||||
more information, see \l{Using Generator Scripts}.
|
||||
You can create either JSON-based or XML-based wizards. We recommend creating
|
||||
JSON-based wizards for new projects. For more information, see:
|
||||
|
||||
\list
|
||||
\li \l{Adding JSON-Based Wizards}
|
||||
\li \l{Adding XML-Based Wizards}
|
||||
\endlist
|
||||
|
||||
Custom wizards are located in subdirectories of the following directories:
|
||||
The following table summarizes the wizards you can create:
|
||||
|
||||
\table
|
||||
\header
|
||||
\li Wizard Type
|
||||
\li JSON-Based
|
||||
\li XML-Based
|
||||
\row
|
||||
\li Class
|
||||
\li \image ok
|
||||
\li \image ok
|
||||
\row
|
||||
\li File
|
||||
\li \image ok
|
||||
\li \image ok
|
||||
\row
|
||||
\li Project
|
||||
\li \image ok
|
||||
\li \image ok
|
||||
\endtable
|
||||
|
||||
\section1 Locating Wizards
|
||||
|
||||
Wizards are located in subdirectories of the following directories:
|
||||
|
||||
\list
|
||||
|
||||
@@ -93,588 +98,4 @@
|
||||
|
||||
\endlist
|
||||
|
||||
They contain an XML configuration file called wizard.xml, the template
|
||||
source files, and optionally, the generator script.
|
||||
|
||||
\section1 Creating Project Wizards
|
||||
|
||||
To create a project wizard:
|
||||
|
||||
\list 1
|
||||
|
||||
\li Make a copy of the \c {share/qtcreator/templates/wizards/helloworld}
|
||||
or \c {share/qtcreator/templates/wizards/listmodel} folder.
|
||||
|
||||
\li Modify the wizard_example.xml file.
|
||||
|
||||
\li The following code determines the type of the wizard and its place
|
||||
in the \uicontrol New dialog:
|
||||
|
||||
\code
|
||||
|
||||
<wizard version="1" kind="project"
|
||||
class="qmakeproject" firstpage="10"
|
||||
id="A.HelloWorld" category="B.CustomProjects">
|
||||
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c version is the version of the file contents. Do not modify
|
||||
this value.
|
||||
|
||||
\li \c kind specifies the type of the wizard: \c project or
|
||||
\c class.
|
||||
|
||||
\li \c class specifies the type of the project. This attribute is
|
||||
optional. Use the value \c qmakeproject to add Qt specific pages.
|
||||
|
||||
\li \c firstpage specifies the place of the new page in the standard
|
||||
project wizard. The value 10 ensures that the custom page
|
||||
appears after the standard pages, as the last page of the
|
||||
wizard.
|
||||
|
||||
\li \c id is the unique identifier for your wizard. The letter
|
||||
specifies the position of the wizard within the \c category. The
|
||||
HelloWorld wizard appears as the first wizard in the second
|
||||
category in the \uicontrol New dialog.
|
||||
|
||||
\li \c category is the category in which to place the wizard in the
|
||||
list. The letter specifies the position of the category in the
|
||||
list in the \uicontrol New dialog.
|
||||
|
||||
\endlist
|
||||
|
||||
\li The following code specifies the icon and text that appear in the
|
||||
\uicontrol New dialog:
|
||||
|
||||
\code
|
||||
|
||||
<icon>console.png</icon>
|
||||
<description>Creates a hello-world-project with custom message.</description>
|
||||
<description xml:lang="de">Erzeugt ein Hello-Welt-Projekt mit einer Nachricht.</description>
|
||||
<displayname>Hello World</displayname>;
|
||||
<displayname xml:lang="de">Hallo Welt</displayname>;
|
||||
<displaycategory>Custom Projects</displaycategory>
|
||||
<displaycategory xml:lang="de">Benutzerdefinierte Projekte</displaycategory>
|
||||
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c displayCategory appears in the \uicontrol New dialog, under
|
||||
\uicontrol Projects.
|
||||
|
||||
\li \c icon appears next to the \c displayName in the middle panel
|
||||
when \c displayCategory is selected.
|
||||
|
||||
\li \c description appears in the right-most panel when
|
||||
\c displayCategory is selected.
|
||||
|
||||
You can add translations as values for the text elements. Specify the target
|
||||
language as an attribute for the element. Use locale names (QLocale).
|
||||
For example, \c {xml:lang="de"}.
|
||||
|
||||
\endlist
|
||||
|
||||
\li Files to be added to the project:
|
||||
|
||||
\list
|
||||
|
||||
\li Template-based: The following code specifies the files to add to
|
||||
the project:
|
||||
\code
|
||||
<files>
|
||||
<file source="main.cpp" openeditor="true" />
|
||||
<file source="project.pro" target="%ProjectName%.pro" openproject="true" />
|
||||
<file source="icon.png" target="%ProjectName%.png" binary="true" />
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c source specifies the file to copy to the project. The
|
||||
files must be located in the wizard folder.
|
||||
|
||||
\li \c openeditor indicates that the file is to be opened in an
|
||||
editor after the wizard has finished.
|
||||
|
||||
\li \c binary indicates that the file is a binary file (for
|
||||
example, an image file). It is to be copied to the target
|
||||
folder as is. Placeholders are not replaced with values.
|
||||
|
||||
\li \c target specifies the new filename for the file. The
|
||||
\c {%ProjectName%} variable is replaced with the string that
|
||||
users specify in the \uicontrol Name field on the first page of
|
||||
the wizard.
|
||||
|
||||
\li \c openproject indicates that the file is a project file
|
||||
which is to be opened after the wizard has finished.
|
||||
|
||||
\endlist
|
||||
|
||||
See also \l{Processing Template Files}.
|
||||
|
||||
\li Generator-script: The following code specifies that the script
|
||||
\c generate.pl is to be used to create the files:
|
||||
|
||||
\code
|
||||
<generatorscript binary="generate.pl">
|
||||
<argument value="--class-name=%ClassName%"/>
|
||||
<argument value="--project-name=%ProjectName%"/>
|
||||
<argument value="--header-suffix=%CppHeaderSuffix%" omit-empty="true"/>
|
||||
<argument value="--source-suffix=%CppSourceSuffix%" omit-empty="true"/>
|
||||
<argument value="--description=%Description%" omit-empty="true" write-file="true"/>
|
||||
</generatorscript>
|
||||
\endcode
|
||||
|
||||
In each argument, the field placeholders are replaced by the
|
||||
field values. There are additional boolean attributes which give
|
||||
fine-grained control:
|
||||
|
||||
\list
|
||||
|
||||
\li \c omit-empty specifies that complete argument is to be
|
||||
omitted when all placeholders expand to empty values. In
|
||||
the above example, the option \c --source-suffix will
|
||||
not be passed to the script if the value is empty.
|
||||
|
||||
\li \c write-file indicates that instead of the expanded
|
||||
value, the value will be written to a temporary file and
|
||||
its file name will be passed to the script instead. This
|
||||
is useful for multi-line text fields.
|
||||
|
||||
\endlist
|
||||
|
||||
See also \l{Using Generator Scripts}.
|
||||
|
||||
\endlist
|
||||
|
||||
\li The following code creates a page that specifies settings for the project:
|
||||
|
||||
\code
|
||||
<!-- Create a 2nd wizard page with parameters -->
|
||||
<fieldpagetitle>Hello World Parameters</fieldpagetitle>
|
||||
<fieldpagetitle xml:lang="de">Hallo Welt Parameter</fieldpagetitle>
|
||||
<fields>
|
||||
<field mandatory="true" name="MESSAGE">
|
||||
<fieldcontrol class="QLineEdit" validator='^[^"]+$' defaulttext="Hello world!" placeholdertext="Enter a message"/>
|
||||
<fielddescription>Hello world message:</fielddescription>
|
||||
<fielddescription xml:lang="de">Hallo-Welt-Nachricht:</fielddescription>
|
||||
</field>
|
||||
</fields>
|
||||
\endcode
|
||||
|
||||
\list
|
||||
|
||||
\li \c fieldpagetitle specifies the title of the page.
|
||||
|
||||
\li \c fields specifies the user interface objects on the page.
|
||||
|
||||
\li \c field specifies one object. You can use a set of interface objects
|
||||
from QtWidgets classes, derived from QWidget, to create fields. This example
|
||||
uses QLineEdit to create an input field. For more information about the objects
|
||||
that you can add, see \l {Supported Widgets}.
|
||||
|
||||
\li \c mandatory specifies whether the field is mandatory (\c true or
|
||||
\c false). For more information, see QWizardPage::registerField().
|
||||
|
||||
\li \c name specifies a name that you can use as a placeholder variable in the
|
||||
template file (for example, \c {%MESSAGE%}).
|
||||
|
||||
\li \c class specifies the type of the \c fieldcontrol. The XML attributes that you
|
||||
can specify for the field depend on the field type.
|
||||
|
||||
\li For a QLineEdit, \c validator specifies a regular expression to check the
|
||||
characters allowed in the field.
|
||||
|
||||
\li \c defaulttext specifies text that appears in the field by
|
||||
default.
|
||||
|
||||
\li For a QLineEdit, \c placeholdertext specifies placeholder text that appears in the
|
||||
field.
|
||||
|
||||
\li \c fielddescription specifies the field name that appears on the
|
||||
wizard page.
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Creating Class Wizards
|
||||
|
||||
The wizard.xml file for a class wizard is very similar to that for a project
|
||||
wizard. The differences are discussed below.
|
||||
|
||||
To create a class wizard:
|
||||
|
||||
\list 1
|
||||
|
||||
\li The following code specifies settings for the wizard:
|
||||
|
||||
\code
|
||||
|
||||
<wizard version="1" kind="class" id="A.ListModel" category="B.CustomClasses">
|
||||
|
||||
<description>Creates a QAbstractListModel implementation.</description>
|
||||
<description xml:lang="de">Erzeugt eine Implementierung von QAbstractListModel.</description>
|
||||
|
||||
<displayname>QAbstractListModel implementation</displayname>
|
||||
<displayname xml:lang="de">Implementierung von QAbstractListModel</displayname>
|
||||
|
||||
<displaycategory>Custom Classes</displaycategory>
|
||||
<displaycategory xml:lang="de">Benutzerdefinierte Klassen</displaycategory>
|
||||
|
||||
\endcode
|
||||
|
||||
For more information about the elements and their values, see
|
||||
\l {Creating Project Wizards}.
|
||||
|
||||
\li The following code specifies the files to add to the project:
|
||||
|
||||
\code
|
||||
|
||||
<files>
|
||||
<file source="listmodel.cpp" target="%ClassName:l%.%CppSourceSuffix%" openeditor="true" />
|
||||
<file source="listmodel.h" target="%ClassName:l%.%CppHeaderSuffix%" openeditor="true" />
|
||||
</files>
|
||||
|
||||
\endcode
|
||||
|
||||
Here, \c target contains the following variables that are used to
|
||||
construct the filename:
|
||||
|
||||
\list
|
||||
|
||||
\li \c {%ClassName:l%} is replaced with the value of the
|
||||
\c ClassName field. The modifier \c l converts the string to
|
||||
lower case, to observe Qt conventions.
|
||||
|
||||
\li \c {%CppSourceSuffix%} and \c {%CppHeaderSuffix%} are
|
||||
pre-defined. For more information, see
|
||||
\l{Pre-defined Standard Variables}.
|
||||
|
||||
\endlist
|
||||
|
||||
\code
|
||||
|
||||
<!-- Create parameter wizard page -->
|
||||
|
||||
<fieldpagetitle>ListModel parameters</fieldpagetitle>
|
||||
<fieldpagetitle xml:lang="de">Parameter des ListModel</fieldpagetitle>
|
||||
<fields>
|
||||
<field name="ClassName">
|
||||
|
||||
<fieldcontrol class="QLineEdit" validator="^[a-zA-Z0-9_]+$" defaulttext="MyListModel" />
|
||||
|
||||
<fielddescription>Class name:</fielddescription>
|
||||
<fielddescription xml:lang="de">Klassenname:</fielddescription>
|
||||
</field>
|
||||
<field name="Datatype">
|
||||
<fieldcontrol class="QComboBox" defaultindex="0">
|
||||
<comboentries>
|
||||
<comboentry value="QString">
|
||||
<comboentrytext>class QString</comboentrytext>
|
||||
<comboentrytext xml:lang="de">Klasse QString</comboentrytext>
|
||||
</comboentry>
|
||||
<comboentry value="int">
|
||||
<comboentrytext>Integer</comboentrytext>
|
||||
<comboentrytext xml:lang="de">Ganzzahlwert</comboentrytext>
|
||||
</comboentry>
|
||||
</comboentries>
|
||||
</fieldcontrol>
|
||||
<fielddescription>Data type:</fielddescription>
|
||||
<fielddescription xml:lang="de">Datentyp:</fielddescription>
|
||||
</field>
|
||||
</fields>
|
||||
|
||||
\endcode
|
||||
|
||||
In addition to QLineEdit, QComboBox is used in the class wizard to
|
||||
create a field. Specify the following XML attributes:
|
||||
|
||||
\list
|
||||
|
||||
\li \c defaultindex specifies which comboentry is displayed by default. In the above
|
||||
example, "0" means that the first comboentry is the default value.
|
||||
|
||||
\li \c comboentries specifies the options in the combobox.
|
||||
|
||||
\li \c value specifies the type of each \c comboentry, QString or integer.
|
||||
|
||||
\li \c comboentrytext specifies the text of the entry.
|
||||
|
||||
\endlist
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Supported Widgets
|
||||
|
||||
You can use the following interface objects to create fields in the wizards:
|
||||
|
||||
\list
|
||||
|
||||
\li PathChooser utility to set paths
|
||||
|
||||
\li Check boxes with text labels (QCheckBox)
|
||||
|
||||
\li Combined button and popup lists (QComboBox)
|
||||
|
||||
\li One-line text editors (QLineEdit)
|
||||
|
||||
\li Multi-line rich text editors (QTextEdit)
|
||||
|
||||
\endlist
|
||||
|
||||
Using QLineEdit and QComboBox is described in the previous sections.
|
||||
The following sections show examples of using the other classes and describe the XML
|
||||
attributes that you can specify for the \c fieldcontrol element of a field in a particular
|
||||
\c class.
|
||||
|
||||
\section2 Path Choosers
|
||||
|
||||
\code
|
||||
<field mandatory="true" name="QtCreatorSources">
|
||||
<fieldcontrol class="Utils::PathChooser" defaulttext="" expectedkind="existingdirectory"/>
|
||||
<fielddescription>Qt Creator sources:</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
The \c defaulttext attribute specifies text that appears in the field by default.
|
||||
|
||||
The text attribute \c expectedkind specifies which type of path is expected:
|
||||
|
||||
\list
|
||||
|
||||
\li \c any accepts any kind of path.
|
||||
|
||||
\li \c file expects a file.
|
||||
|
||||
\li \c directory expects a directory.
|
||||
|
||||
\li \c existingdirectory expects an existing directory.
|
||||
|
||||
\li \c command expects an executable file.
|
||||
|
||||
\li \c existingcommand expects an existing, executable file.
|
||||
|
||||
\endlist
|
||||
|
||||
\section2 Check Boxes
|
||||
|
||||
To make check boxes appear selected by default, set the \c fieldcontrol attribute
|
||||
\c defaultvalue to \c true. Any other value or omitting the attribute makes the check box
|
||||
appear not selected.
|
||||
|
||||
For example:
|
||||
|
||||
\code
|
||||
<field name="CONSOLE">
|
||||
<fieldcontrol class="QCheckBox" defaultvalue="true"/>
|
||||
<fielddescription>Console application</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
For more examples about using check boxes, see \l{Processing Template Files}.
|
||||
|
||||
\section2 Text Editors
|
||||
|
||||
\code
|
||||
<field name="License">
|
||||
<fieldcontrol class="QTextEdit" defaulttext="Put your license text here" />
|
||||
<fielddescription>License:</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
The \c defaulttext attribute specifies text that appears in the field by default.
|
||||
|
||||
The boolean attribute \c acceptRichText sets the property QTextEdit::acceptRichText.
|
||||
It is disabled by default (as opposed to the default value of QTextEdit::acceptRichText)
|
||||
to prevent pasting of rich text with formatting, which is not desirable for code templates.
|
||||
|
||||
\section1 Processing Template Files
|
||||
|
||||
When processing a template source file, placeholders specifying the field
|
||||
names in the format \c{%FIELDNAME%} are replaced by the values entered by
|
||||
the user. In addition, modifier characters are supported. For example,
|
||||
\c{%FIELDNAME:u%} specifies that the value is converted to upper case. This
|
||||
enables generating header guards for C++ header files.
|
||||
|
||||
The following modifier characters are supported:
|
||||
|
||||
\list
|
||||
|
||||
\li \c{l} for lower case.
|
||||
|
||||
\li \c{u} for upper case.
|
||||
|
||||
\li \c{c} for upper case initial letter ("project" > "Project").
|
||||
|
||||
\endlist
|
||||
|
||||
In the \c{helloworld} example, the placeholder \c %NETWORK% is used together with the
|
||||
QCheckBox class. The following line is added to the project file:
|
||||
|
||||
\code
|
||||
%NETWORK%QT += network
|
||||
\endcode
|
||||
|
||||
And the following field is specified in the wizard.xml:
|
||||
|
||||
\code
|
||||
<field name="NETWORK">
|
||||
<fieldcontrol class="QCheckBox" truevalue="" falsevalue="# "/>
|
||||
<fielddescription>Include network module</fielddescription>
|
||||
<fielddescription xml:lang="de">Netzwerk-Modul verwenden</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
If the checkbox is checked, the placeholder is replaced by \c truevalue. If it is not
|
||||
checked, the placeholder is replaced by \c falsevalue.
|
||||
|
||||
You can use conditions to add sections of the file depending on field
|
||||
values. Use a syntax that is similar to C++ preprocessing, as demonstrated
|
||||
in the project file of the \c{helloworld} example:
|
||||
|
||||
\code
|
||||
|
||||
@if "%SCRIPT%" == "true"
|
||||
QT += script
|
||||
@endif
|
||||
|
||||
\endcode
|
||||
|
||||
The value of the Boolean (QCheckBox) field labeled \c{SCRIPT} determines
|
||||
whether the script module is added. The expressions must expand to valid
|
||||
Javascript expressions after field replacement.
|
||||
|
||||
For example, the following field is specified in the wizard.xml:
|
||||
|
||||
\code
|
||||
<field name="SCRIPT">
|
||||
<fieldcontrol class="QCheckBox"/>
|
||||
<fielddescription>Include script module</fielddescription>
|
||||
<fielddescription xml:lang="de">Script-Modul verwenden</fielddescription>
|
||||
</field>
|
||||
\endcode
|
||||
|
||||
\section1 Pre-defined Standard Variables
|
||||
|
||||
In addition to the field values entered by the user, you can use
|
||||
the following pre-defined standard values:
|
||||
|
||||
\list
|
||||
|
||||
\li \c {%ProjectName%} is replaced by the name of the project in the
|
||||
case of project wizards.
|
||||
|
||||
\li \c {%Path%} is replaced by the path to the target directory. For
|
||||
classes, this is the directory, where the files are created. For
|
||||
project wizards, an additional subdirectory named after the project
|
||||
is created.
|
||||
|
||||
\li \c {%TargetPath%} is replaced by the path to the directory where the
|
||||
actual files are created. For non-project wizards, it is identical
|
||||
to \c %Path%. For project wizards, it is \c %Path%/%ProjectName%.
|
||||
|
||||
\li \c {%CppSourceSuffix%} is replaced by the default source suffix,
|
||||
which is defined in \QC in \uicontrol {Tools > Options > C++ >
|
||||
File Naming}. For example, if users enter \b MyClass, the
|
||||
filename becomes myclass.cpp when the project is created.
|
||||
|
||||
\li \c {%CppHeaderSuffix%} is replaced by the default header suffix,
|
||||
which is also defined in \uicontrol {File Naming}.
|
||||
|
||||
\li \c {%CurrentDate%} is replaced by the current date in the format
|
||||
\c {YYYY-MM-DD} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentTime%} is replaced by the current time in the format
|
||||
\c {HH:MM:SS} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentDate:Locale%} is replaced by the current date in the short format
|
||||
specified by the application's locale.
|
||||
|
||||
\li \c {%CurrentTime:Locale%} is replaced by the current time in the short format
|
||||
specified by the application's locale.
|
||||
|
||||
\li \c {%CurrentDate:ISO%} is replaced by the current date in the format
|
||||
\c {YYYY-MM-DD} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentTime:ISO%} is replaced by the current time in the format
|
||||
\c {HH:MM:SS} as specified by ISO 8601.
|
||||
|
||||
\li \c {%CurrentDate:RFC%} is replaced by the current date in the format
|
||||
\c {DD Mon YYYY}, where \c {Mon} is the three letter month name, as specified by RFC 2822.
|
||||
|
||||
\li \c {%CurrentTime:RFC%} is replaced by the current time in the format
|
||||
\c {HH:MM:SS} as specified by RFC 2822.
|
||||
|
||||
\endlist
|
||||
|
||||
\section1 Validating User Input
|
||||
|
||||
You can specify validation rules for user input. The rules consist of a
|
||||
Boolean JavaScript expression and an error message. The placeholders in them
|
||||
are replaced with values before they are evaluated or displayed.
|
||||
|
||||
Consider the following rule used in the \l{Creating Class Wizards} example:
|
||||
|
||||
\code
|
||||
<validationrules>
|
||||
<validationrule condition='"%ClassName%" != "QAbstractListModel"'>
|
||||
<message>%ClassName% cannot be used as class name.</message>
|
||||
<message xml:lang="de">%ClassName% kann nicht als Klassenname verwendet werden.</message>
|
||||
</validationrule>
|
||||
</validationrules>
|
||||
\endcode
|
||||
|
||||
It ensures that the class name entered by the user does not match the name
|
||||
of the base class. If the validation fails, a red label displaying the
|
||||
message appears at the bottom of the wizard page.
|
||||
|
||||
\section1 Using Generator Scripts
|
||||
|
||||
The values entered in the wizard page are passed to the script
|
||||
as command line arguments as defined by the wizard configuration file.
|
||||
|
||||
In addition, the script must implement a \c{--dry-run} command line option.
|
||||
|
||||
\QC needs to know the file names before the files are created to check
|
||||
whether files with identical names already exist, for example. Therefore,
|
||||
script file generation is a two-step process:
|
||||
|
||||
\list 1
|
||||
|
||||
\li Determine file names and attributes: The script is called with the
|
||||
command line \c{--dry-run} option and the field values. It then prints
|
||||
the relative path names of the files it intends to create, followed by
|
||||
comma-separated attributes matching those of the \c{<file>} element, for
|
||||
example:
|
||||
|
||||
\code
|
||||
myclass.cpp,openeditor
|
||||
myclass.h,openeditor
|
||||
myproject.pro,openproject
|
||||
\endcode
|
||||
|
||||
\li Create files: The script is called with the parameters only in the
|
||||
working directory. It then actually creates the files. If directories
|
||||
are needed, the script should create them, too.
|
||||
|
||||
\endlist
|
||||
|
||||
The \c{scriptgeneratedproject} sample wizard illustrates the usage.
|
||||
A typical script invocation for this example (obtained by running \QC with
|
||||
\c{--customwizard-verbose}) looks as follows:
|
||||
|
||||
\code
|
||||
generate.pl --class-name=TestClass --project-name=TestProject --header-suffix=h --source-suffix=cpp --description=/tmp/qtcreatorj26629.txt
|
||||
\endcode
|
||||
|
||||
By default, the scripts are run in the directory corresponding to
|
||||
\c %TargetPath%. This can be overridden by specifying the attribute
|
||||
\c workingdirectory on the element \c generatorscript. For example, if the
|
||||
script creates the project directory by itself, %Path% can be specified. In
|
||||
that case, \c --dry-run should output the correct relative paths or absolute
|
||||
paths constructed using the value of \c %Path%.
|
||||
|
||||
*/
|
||||
|
||||
@@ -143,6 +143,10 @@
|
||||
\li \l{Opening Projects}
|
||||
\li \l{Adding Libraries to Projects}
|
||||
\li \l{Adding New Custom Wizards}
|
||||
\list
|
||||
\li \l{Adding JSON-Based Wizards}
|
||||
\li \l{Adding XML-Based Wizards}
|
||||
\endlist
|
||||
\endlist
|
||||
\li \l{Using Version Control Systems}
|
||||
\li \l{Configuring Projects}
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
\li Click \uicontrol Design to open the file in \QMLD.
|
||||
|
||||
\image qmldesigner-tutorial-desing-mode.png "Transitions project in Design Mode"
|
||||
\image qmldesigner-tutorial-design-mode.png "Transitions project in Design Mode"
|
||||
|
||||
\li In the \uicontrol Navigator, select \uicontrol Text and press \key Delete to
|
||||
delete it.
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
\section1 Connecting Objects to Signals
|
||||
|
||||
To connect objects to signals in QML, create \l{Connection} objects.
|
||||
To connect objects to signals in QML, create \l{Connections} objects.
|
||||
|
||||
\image qmldesigner-connections.png
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
You can edit \l{Qt Quick UI Forms} (ui.qml files) in \QMLD. \QC opens the
|
||||
UI forms in the \uicontrol Design mode. It is recommended that you use UI forms
|
||||
for components that you want to desing in \QMLD.
|
||||
for components that you want to design in \QMLD.
|
||||
|
||||
\image qmldesigner-visual-editor.png "Visual editor"
|
||||
|
||||
@@ -125,8 +125,8 @@
|
||||
|
||||
\section2 Setting the Stacking Order
|
||||
|
||||
The \l{Item#z-prop}{z property} of an
|
||||
item determines its position in relation to its sibling items in the
|
||||
The \c z property of an \l Item determines its position in relation to its
|
||||
sibling items in the
|
||||
type hierarchy. By default, items with a higher stacking value are
|
||||
drawn on top of siblings with a lower stacking value. Items with the same
|
||||
stacking value are drawn in the order they are listed, from the last item
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
information for code completion and the semantic checks to work correctly.
|
||||
|
||||
When you write a QML module or use QML from a C++ application you typically
|
||||
register new types with \l{QQmlEngine#qmlRegisterType-3}{qmlRegisterType()} or expose some
|
||||
register new types with the \l{QQmlEngine} class \c qmlRegisterType()
|
||||
function or expose some
|
||||
class instances with \l{QQmlContext::setContextProperty()}. The \QC C++
|
||||
code model now scans for these calls and
|
||||
tells the QML code model about them. This means that properties are
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
This tutorial describes how to use \QC to create a small Qt application,
|
||||
Text Finder. It is a simplified version of the Qt UI Tools \l{Text Finder
|
||||
example}. The application user interface is constructed from Qt widgets by
|
||||
Example}. The application user interface is constructed from Qt widgets by
|
||||
using \QD. The application logic is written in C++ by using the code editor.
|
||||
|
||||
\image qtcreator-textfinder-screenshot.png
|
||||
|
||||
Reference in New Issue
Block a user