Commit cf47f3e8 authored by Eike Ziller's avatar Eike Ziller
Browse files

Merge remote-tracking branch 'origin/4.2'

Change-Id: Ia346d86ad5fabe9d91454ea642cbeac5ec862699
parents e0ee142f c777bd32
......@@ -15,6 +15,7 @@ macOS 10.8 or later
* Qt 5.6.0 or later
* Qt WebEngine module for QtWebEngine based help viewer
* On Windows:
* ActiveState Active Perl
* MinGW with g++ 4.8 or Visual Studio 2015 or later
......@@ -65,12 +65,12 @@ C++ Support
* Added preview of images to tool tip on Qt resource URLs
* Added option to skip big files when indexing (QTCREATORBUG-16712)
* Added notification for parsing errors in headers
* Fixed `Move Definition to Class` for functions in template class and
template member functions (QTCREATORBUG-14354)
* Fixed issues with `Add Declaration`, `Add Definition`, and
`Move Definition Outside Class` for template functions
* Clang Code Model
* Added notification for parsing errors in headers
* Improved responsiveness of completion and highlighting
......@@ -91,7 +91,7 @@ QML Profiler
Qt Quick Designer
* Added completion expression editor
* Added completion to expression editor
* Added menu for editing `when` condition of states
* Added editor for managing C++ backend objects
* Added reformatting of `.ui.qml` files on save
......@@ -106,9 +106,11 @@ Qt Quick Designer
Diff Viewer
* Added local diff for modified files in Qt Creator (`Diff` >
`Diff Current File`, `Diff` > `Diff All Modified Files`)
* Added local diff for modified files in Qt Creator (`Tools` > `Diff` >
`Diff Current File`, `Tools` > `Diff` > `Diff Open Files`)
* Added option to diff files when they changed on disk
* Fixed that reload prompt was shown when reverting change
Version Control Systems
......@@ -140,3 +142,45 @@ Android
* Fixed handling of minimum required API level (QTCREATORBUG-16740)
Credits for these changes go to:
Aaron Barany
Alessandro Portale
Alexander Drozdov
Andre Hartmann
André Pönitz
Arnold Dumas
Christian Kandeler
Christian Stenger
Daniel Langner
Daniel Trevitz
David Schulz
Eike Ziller
Florian Apolloner
Francois Ferrand
Friedemann Kleint
Giuseppe D'Angelo
Jake Petroules
Jaroslaw Kobus
Jochen Becher
Konstantin Shtepa
Kudryavtsev Alexander
Leena Miettinen
Louai Al-Khanji
Marc Reilly
Marco Benelli
Marco Bubke
Mitch Curtis
Nazar Gerasymchuk
Nikita Baryshnikov
Nikolai Kosjar
Orgad Shaneh
Oswald Buddenhagen
Øystein Walle
Robert Löhning
Serhii Moroz
Takumi ASAKI
Tasuku Suzuki
Thomas Hartmann
Tim Jenssen
Tobias Hunger
Ulf Hermann
Vikas Pachdha

22.2 KB | W: | H:


24.5 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

9.5 KB | W: | H:


13.3 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
......@@ -417,6 +417,9 @@
\uicontrol Window > \uicontrol Views > \uicontrol {Reset to Default Layout}
to reset the views to their original sizes and positions.
To save space on the screen, select \uicontrol Window > \uicontrol Views >
\uicontrol {Automatically Hide View Titlebars}.
Once the program starts running under the control of the debugger, it
behaves and performs as usual. You can interrupt a running C++ program by
selecting \uicontrol Debug > \uicontrol Interrupt. The program is
......@@ -554,6 +554,12 @@
\li M208
\li Error
\li This id might be ambiguous and is not supported in the \QMLD.
\li M209
\li Error
\li This type (type name) is not supported as a root element by \QMLD.
......@@ -38,9 +38,13 @@
\title Keyboard Shortcuts
\QC provides various keyboard shortcuts to speed up your development
process. In addition, you can specify your own keyboard shortcuts for some
functions that can be easily performed with a mouse, and therefore do not
appear in menus or have default keyboard shortcuts. For example, selecting
and deleting words or lines in an editor.
To view all keyboard shortcuts defined in \QC, and to change them, select
To view all functions available in \QC and the keyboard shortcuts defined
for them, select
\uicontrol {Tools > Options > Environment > Keyboard}. The shortcuts are listed by
category. To find a keyboard
shortcut in the list, enter a function name or shortcut in the \uicontrol Filter
......@@ -80,10 +80,16 @@
\uicontrol {Switch to}.
When you launch \QC, a list of existing sessions is displayed in the
\uicontrol Welcome mode.
\uicontrol Welcome mode. To open a session, select it or press
\key Ctrl+Alt+<number>, where \e <number> is the number of the session to
open (available for the first nine sessions).
\image qtcreator-welcome-session.png
To view more information about a session, select the down arrow icon that
appears when you move the mouse cursor over the session name. Select actions
to clone, rename, and delete sessions.
When you start \QC from the command line, you can give the name of
a session as argument and \QC will start with this session.
......@@ -82,8 +82,9 @@
\list 1
\li Select \uicontrol Tools > \uicontrol Options >
\uicontrol {Build & Run} > \uicontrol Compilers > \uicontrol Add
and select a compiler in the list.
\uicontrol {Build & Run} > \uicontrol Compilers > \uicontrol Add,
then select a compiler in the list, and then select \uicontrol C or
\uicontrol C++ to add a C or C++ compiler.
\image qtcreator-toolchains.png
......@@ -124,7 +125,8 @@
\list 1
\li Select \uicontrol Tools > \uicontrol Options > \uicontrol {Build & Run} >
\uicontrol Compilers > \uicontrol Add > \uicontrol Custom.
\uicontrol Compilers > \uicontrol Add > \uicontrol Custom >
\uicontrol C or \uicontrol C++.
\li In the \uicontrol Name field, enter a name for the compiler.
......@@ -75,14 +75,36 @@
\list 1
\li Select \uicontrol File > \uicontrol{Open File or Project} and select the project
to open.
\li Select \uicontrol File > \uicontrol {Open File or Project}
(\key Ctrl+O or \key Cmd+O on \macos) and select the project to
\li In the \uicontrol {Configure Project} tab, select kits for building and running your
project, and click \uicontrol {Configure Project}.
You can use the following keyboard shortcuts to open projects, depending on
the mode you are currently in:
\li In all modes, select \key Ctrl+O (\key Cmd+O on \macos) to open the
\uicontrol {Open File} dialog, where you can select a project file
to open a project.
\li In all modes, except the \uicontrol Help mode, select
\key Ctrl+Shift+O (\key Cmd+Shift+O on \macos) to open the
\uicontrol {Load Project} dialog, where you can select a project
file to open a project.
\li In the \uicontrol Welcome mode, \uicontrol Projects tab, select
\key Ctrl+Shift+number (\key Cmd+Shift+number on \macos), where
the number is the number of a project in the list of recently opened
\QC parses all the source files in the project and performs a semantic
analysis to build up the information that it needs for functions such as
navigation and finding usages. A progress bar is displayed during parsing.
......@@ -111,6 +111,33 @@
(\uicontrol {Variables}) button in a field to select from a list of variables that
are available in a particular context.
The following syntax enables you to use environment variables as \QC
variables: %{Env:VARNAME}.
\QC uses pattern substitution when expanding variable names. To replace the
first match of \e pattern within \e variable with \e replacement, use:
To replace all matches of \e pattern within \e variable with \e replacement,
The pattern can be a regular expression and the replacement can contain
backreferences. For example, if \c %{variable} is \c my123var, then
\c %{variable/(..)(\d+)/\2\1} is expanded to \c {123myvar}.
To use the default value if the variable is not set, use:
\section1 Build Steps
The build system of \QC is built on qmake and make. In \uicontrol{Build Steps} you
......@@ -99,6 +99,8 @@
\li \l{Specifying Dependencies}{Dependencies}
\li \l{Parsing C++ Files}{Clang Code Model} (experimental)
\li \l{Using Clang Static Analyzer}{Clang Static Analyzer}
\li \l{To-Do Entries}{To-Do} (experimental)
......@@ -91,8 +91,8 @@
image is located. If you are not cross-compiling, leave this field
\li In the \uicontrol {Compiler} field, select the compiler required
to build the project. You can add compilers to the list
\li In the \uicontrol {Compiler} field, select the C or C++ compiler
used to build the project. You can add compilers to the list
if they are installed on the development PC, but were not detected
automatically. For more information, see \l{Adding Compilers}.
......@@ -55,6 +55,11 @@
Classes registered with \c qmlRegisterType() can be used as backend objects
in the \QMLD. For more information, see \l {Adding Connections}.
By default, \QC will look in the QML import path of Qt for QML modules.
If your applications adds additional import paths that \QC should use,
then you can specify those using \c{QML_IMPORT_PATH} in the \c{.pro} file of your
Ideally, QML modules have a \c{plugins.qmltypes} file in the same directory
as the \c qmldir file. The \c qmltypes file contains a description of the
types exported by the module's plugins and is loaded by \QC when the
......@@ -117,4 +122,9 @@
environment variable to check whether the plugin is currently being run
by an application or edited in the \uicontrol Design mode.
If you want to use a different module in \QMLD than in your actual
application for example to mockup C++ items, then you can use \c{QML_DESIGNER_IMPORT_PATH}
in the \c{.pro} file.
Modules in the import paths defined in \c{QML_DESIGNER_IMPORT_PATH} will be used only in \QMLD.
......@@ -1275,6 +1275,12 @@ def qdump__QStaticStringData(d, value):
d.putValue(d.hexencode(data), 'utf16')
def qdump__QTypedArrayData(d, value):
if value.type[0].name == 'unsigned short':
qdump__QStringData(d, value)
qdump__QArrayData(d, value)
def qdump__QStringData(d, value):
(ref, size, alloc, pad, offset) = value.split('III@p')
elided, shown = d.computeLimit(size, d.displayStringLimit)
......@@ -56,7 +56,7 @@ def qdump__std____1__complex(d, value):
def qdump__std__deque(d, value):
if d.isQnxTarget():
if d.isQnxTarget() or d.isMsvcTarget():
qdump__std__deque__QNX(d, value)
......@@ -117,15 +117,20 @@ def qdump__std__deque__QNX(d, value):
bufsize = 1
myoff = value['_Myoff']
mysize = value['_Mysize']
mapsize = value['_Mapsize']
val = value['_Mypair']['_Myval2']
val = value
myoff = val['_Myoff'].integer()
mysize = val['_Mysize'].integer()
mapsize = val['_Mapsize'].integer()
d.check(0 <= mapsize and mapsize <= 1000 * 1000 * 1000)
if d.isExpanded():
with Children(d, mysize, maxNumChild=2000, childType=innerType):
map = value['_Map']
map = val['_Map']
for i in d.childRange():
block = myoff / bufsize
offset = myoff - (block * bufsize)
......@@ -139,7 +144,7 @@ def qdump__std____debug__deque(d, value):
def qdump__std__list(d, value):
if d.isQnxTarget():
if d.isQnxTarget() or d.isMsvcTarget():
qdump__std__list__QNX(d, value)
......@@ -167,7 +172,7 @@ def qdump__std__list(d, value):
def qdump__std__list__QNX(d, value):
node = value["_Myhead"]
size = value["_Mysize"]
size = value["_Mysize"].integer()
d.putItemCount(size, 1000)
......@@ -607,16 +612,25 @@ def qdump__std____1__wstring(d, value):
def qdump__std__shared_ptr(d, value):
i = value["_M_ptr"]
if d.isMsvcTarget:
i = value["_Ptr"]
i = value["_M_ptr"]
if i.integer() == 0:
with Children(d):
short = d.putSubItem("data", i)
refcount = value["_M_refcount"]["_M_pi"]
d.putIntItem("usecount", refcount["_M_use_count"])
d.putIntItem("weakcount", refcount["_M_weak_count"])
if d.isMsvcTarget:
refcount = value["_Rep"]
d.putIntItem("usecount", refcount["_Uses"])
d.putIntItem("weakcount", refcount["_Weaks"])
refcount = value["_M_refcount"]["_M_pi"]
d.putIntItem("usecount", refcount["_M_use_count"])
d.putIntItem("weakcount", refcount["_M_weak_count"])
d.putValue(short.value, short.encoding)
def qdump__std____1__shared_ptr(d, value):
......@@ -767,7 +781,10 @@ def qform__std__valarray():
return arrayForms()
def qdump__std__valarray(d, value):
(size, data) = value.split('pp')
if d.isMsvcTarget():
(data, size) = value.split('pp')
(size, data) = value.split('pp')
d.putPlotData(data, size, value.type[0])
......@@ -685,16 +685,36 @@ void NodeInstanceServer::setupDummysForContext(QQmlContext *context)
static bool isTypeAvailable(const MockupTypeContainer &mockupType, QQmlEngine *engine)
QString qmlSource;
qmlSource.append("import " +
+ " "
+ QString::number(mockupType.majorVersion())
+ "." + QString::number(mockupType.minorVersion())
+ "\n");
qmlSource.append(QString::fromUtf8(mockupType.typeName()) + "{\n}\n");
QQmlComponent component(engine);
component.setData(qmlSource.toUtf8(), QUrl());
return !component.isError();
void NodeInstanceServer::setupMockupTypes(const QVector<MockupTypeContainer> &container)
for (const MockupTypeContainer &mockupType : container) {
if (!isTypeAvailable(mockupType, engine()))
......@@ -17,7 +17,7 @@
{ "key": "CN", "value": "%{JS: Cpp.className('%{Class}')}" },
{ "key": "Base", "value": "%{JS: ( '%{BaseCB}' === '' ) ? '%{BaseEdit}' : '%{BaseCB}'}" },
{ "key": "isQObject", "value": "%{JS: [ 'QObject', 'QWidget', 'QMainWindow', 'QDeclarativeItem', 'QQuickItem'].indexOf('%{Base}') >= 0 }" },
{ "key": "GUARD", "value": "%{JS: Cpp.classToHeaderGuard('%{Class}', '%{JS: Util.preferredSuffix('text/x-c++hdr')}')}" },
{ "key": "GUARD", "value": "%{JS: Cpp.headerGuard('%{HdrFileName}')}" },
{ "key": "SharedDataInit", "value": "%{JS: ('%{IncludeQSharedData}') ? 'data(new %{CN}Data)' : '' }" }
......@@ -10,3 +10,14 @@ CONFIG -= app_bundle
SOURCES += %{MainCppName}
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment