Merge remote-tracking branch 'origin/4.2' into 4.3

Conflicts:
	doc/src/qtcreator.qdoc
	tests/system/suite_general/suite.conf

Change-Id: Ia298b177d6920a1d853e342b62cf98f7c48a278a
This commit is contained in:
Eike Ziller
2017-03-09 12:11:17 +01:00
36 changed files with 539 additions and 408 deletions

37
dist/changes-4.2.2.md vendored
View File

@@ -7,6 +7,14 @@ you can check out from the public Git repository. For example:
git clone git://code.qt.io/qt-creator/qt-creator.git git clone git://code.qt.io/qt-creator/qt-creator.git
git log --cherry-pick --pretty=oneline v4.2.1..v4.2.2 git log --cherry-pick --pretty=oneline v4.2.1..v4.2.2
All Projects
* Fixed available kits after selecting Qt 5.8 as minimal required version
in wizard (QTCREATORBUG-17574)
* Fixed that `Run in terminal` was sometimes ignored (QTCREATORBUG-17608)
* Fixed that `This file is not part of any project` was shown in editor after
adding new file to project (QTCREATORBUG-17743)
Qt Support Qt Support
* Fixed ABI detection of static Qt builds * Fixed ABI detection of static Qt builds
@@ -14,6 +22,18 @@ Qt Support
Qbs Projects Qbs Projects
* Fixed duplicate include paths (QTCREATORBUG-17381) * Fixed duplicate include paths (QTCREATORBUG-17381)
* Fixed that generated object files where shown in Locator and Advanced Search
(QTCREATORBUG-17382)
C++ Support
* Fixed that inline namespaces were used in generated code (QTCREATORBUG-16086)
Debugging
* GDB
* Fixed performance regression when resolving enum names
(QTCREATORBUG-17598)
Version Control Systems Version Control Systems
@@ -23,3 +43,20 @@ Version Control Systems
when using `git grep` when using `git grep`
* Fixed discarding changes before performing other actions (such as Pull) * Fixed discarding changes before performing other actions (such as Pull)
(QTCREATORBUG-17156) (QTCREATORBUG-17156)
Platform Specific
Android
* Fixed that installing package with lower version number than already installed
package silently failed (QTCREATORBUG-17789)
* Fixed crash when re-running application after stopping it (QTCREATORBUG-17691)
iOS
* Fixed running applications on devices with iOS 10.1 and later
(QTCREATORBUG-17818)
BareMetal
* Fixed debugging with OpenOCD in TCP/IP mode on Windows (QTCREATORBUG-17765)

View File

@@ -10,7 +10,6 @@ defines = Q_QDOC \
Q_BYTE_ORDER \ Q_BYTE_ORDER \
QT_DEPRECATED \ QT_DEPRECATED \
Q_NO_USING_KEYWORD \ Q_NO_USING_KEYWORD \
__cplusplus \ __cplusplus
$QTC_LICENSE_TYPE
versionsym = QT_VERSION_STR versionsym = QT_VERSION_STR

View File

@@ -38,27 +38,26 @@ sourcedirs = . \
headers.fileextensions = "*.h" headers.fileextensions = "*.h"
sources.fileextensions = "*.cpp *.qdoc" sources.fileextensions = "*.cpp *.qdoc"
imagedirs = $SRCDIR/api/images $SRCDIR/images $SRCDIR/templates/images imagedirs = ../api/images ../images ../templates/images
outputdir = $OUTDIR exampledirs = ../api/examples
exampledirs = $SRCDIR/api/examples
indexes += $QDOC_INDEX_DIR/qtwidgets/qtwidgets.index \ depends += qtwidgets \
$QDOC_INDEX_DIR/qtcore/qtcore.index \ qtcore \
$QDOC_INDEX_DIR/qtqml/qtqml.index \ qtqml \
$QDOC_INDEX_DIR/qtquick/qtquick.index \ qtquick \
$QDOC_INDEX_DIR/qmake/qmake.index \ qmake \
$QDOC_INDEX_DIR/qtdesigner/qtdesigner.index \ qtdesigner \
$QDOC_INDEX_DIR/qtdoc/qtdoc.index \ qtdoc \
$QDOC_INDEX_DIR/qtgui/qtgui.index \ qtgui \
$QDOC_INDEX_DIR/qthelp/qthelp.index \ qthelp \
$QDOC_INDEX_DIR/qtquickcontrols/qtquickcontrols.index \ qtquickcontrols \
$QDOC_INDEX_DIR/qtquicklayouts/qtquicklayouts.index \ qtquicklayouts \
$QDOC_INDEX_DIR/qtlinguist/qtlinguist.index \ qtlinguist \
$QDOC_INDEX_DIR/qtscript/qtscript.index \ qtscript \
$QDOC_INDEX_DIR/qtsensors/qtsensors.index \ qtsensors \
$QDOC_INDEX_DIR/qtuitools/qtuitools.index \ qtuitools \
$QDOC_INDEX_DIR/qtwebkit/qtwebkit.index \ qtwebkit \
$QDOC_INDEX_DIR/qtxml/qtxml.index qtxml
include(macros.qdocconf) include(macros.qdocconf)
include(qt-cpp-ignore.qdocconf) include(qt-cpp-ignore.qdocconf)

View File

@@ -3,51 +3,49 @@ description = "Qt Creator Manual"
url = http://doc.qt.io/qtcreator url = http://doc.qt.io/qtcreator
headerdirs = headerdirs =
sourcedirs = $SRCDIR/src sourcedirs = ../src
imagedirs = $SRCDIR/images \ imagedirs = ../images \
$SRCDIR/templates/images \ ../templates/images \
$SRCDIR/../src/libs/qmleditorwidgets/images \ ../../src/libs/qmleditorwidgets/images \
$SRCDIR/../src/libs/utils/images \ ../../src/libs/utils/images \
$SRCDIR/../src/plugins/android/images \ ../../src/plugins/android/images \
$SRCDIR/../src/plugins/autotest/images \ ../../src/plugins/autotest/images \
$SRCDIR/../src/plugins/classview/images \ ../../src/plugins/classview/images \
$SRCDIR/../src/plugins/coreplugin/images \ ../../src/plugins/coreplugin/images \
$SRCDIR/../src/plugins/debugger/images \ ../../src/plugins/debugger/images \
$SRCDIR/../src/plugins/diffeditor/images \ ../../src/plugins/diffeditor/images \
$SRCDIR/../src/plugins/help/images \ ../../src/plugins/help/images \
$SRCDIR/../src/plugins/projectexplorer/images \ ../../src/plugins/projectexplorer/images \
$SRCDIR/../src/plugins/qmldesigner/components/formeditor \ ../../src/plugins/qmldesigner/components/formeditor \
$SRCDIR/../src/plugins/qmldesigner/components/navigator \ ../../src/plugins/qmldesigner/components/navigator \
$SRCDIR/../src/plugins/scxmleditor/common/images \ ../../src/plugins/scxmleditor/common/images \
$SRCDIR/../src/plugins/texteditor/images ../../src/plugins/texteditor/images
outputdir = $OUTDIR exampledirs = ../examples
exampledirs = $SRCDIR/examples
examples.fileextensions += *.qml *.svg examples.fileextensions += *.qml *.svg
HTML.extraimages = images/commercial.png HTML.extraimages = images/commercial.png
qhp.QtCreator.extraFiles = images/commercial.png qhp.QtCreator.extraFiles = images/commercial.png
depends += qtwidgets \
indexes += $QDOC_INDEX_DIR/qtwidgets/qtwidgets.index \ qtcore \
$QDOC_INDEX_DIR/qtcore/qtcore.index \ qtqml \
$QDOC_INDEX_DIR/qtqml/qtqml.index \ qtquick \
$QDOC_INDEX_DIR/qtquick/qtquick.index \ qmake \
$QDOC_INDEX_DIR/qmake/qmake.index \ qtdesigner \
$QDOC_INDEX_DIR/qtdesigner/qtdesigner.index \ qtdoc \
$QDOC_INDEX_DIR/qtdoc/qtdoc.index \ qtgui \
$QDOC_INDEX_DIR/qtgui/qtgui.index \ qthelp \
$QDOC_INDEX_DIR/qthelp/qthelp.index \ qtquickcontrols \
$QDOC_INDEX_DIR/qtquickcontrols/qtquickcontrols.index \ qtquickcontrols2 \
$QDOC_INDEX_DIR/qtquickcontrols2/qtquickcontrols2.index \ qtquickextras \
$QDOC_INDEX_DIR/qtquickextras/qtquickextras.index \ qtlinguist \
$QDOC_INDEX_DIR/qtlinguist/qtlinguist.index \ qtscript \
$QDOC_INDEX_DIR/qtscript/qtscript.index \ qtscxml \
$QDOC_INDEX_DIR/qtscxml/qtscxml.index \ qtsensors \
$QDOC_INDEX_DIR/qtsensors/qtsensors.index \ qttestlib \
$QDOC_INDEX_DIR/qttestlib/qttestlib.index \ qtuitools \
$QDOC_INDEX_DIR/qtuitools/qtuitools.index \ qtxml
$QDOC_INDEX_DIR/qtxml/qtxml.index
include(macros.qdocconf) include(macros.qdocconf)
include(qt-cpp-ignore.qdocconf) include(qt-cpp-ignore.qdocconf)
@@ -67,7 +65,7 @@ qhp.QtCreator.indexRoot =
qhp.QtCreator.subprojects = manual qhp.QtCreator.subprojects = manual
qhp.QtCreator.subprojects.manual.title = Qt Creator Manual qhp.QtCreator.subprojects.manual.title = Qt Creator Manual
qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator Manual qhp.QtCreator.subprojects.manual.indexTitle = Qt Creator TOC
qhp.QtCreator.subprojects.manual.type = manual qhp.QtCreator.subprojects.manual.type = manual
# Doxygen compatibility commands # Doxygen compatibility commands

View File

@@ -1,89 +1,9 @@
HELPGENERATOR = $$shell_path($$[QT_INSTALL_BINS]/qhelpgenerator) -platform minimal build_online_docs: \
QDOC_BIN = $$shell_path($$[QT_INSTALL_BINS]/qdoc) QTC_DOCS = $$PWD/qtcreator-online.qdocconf $$PWD/api/qtcreator-dev-online.qdocconf
QDOC_GLOBAL = QT_INSTALL_DOCS=$$[QT_INSTALL_DOCS/src] QDOC_INDEX_DIR=$$[QT_INSTALL_DOCS] else: \
COMPAT = QTC_DOCS = $$PWD/qtcreator.qdocconf $$PWD/api/qtcreator-dev.qdocconf
VERSION_TAG = $$replace(QTCREATOR_VERSION, "[-.]", ) include(../docs.pri)
isEmpty(LICENSE_TYPE):LICENSE_TYPE=opensource
# unset the installdir for qdoc, so we force generation
# of URLs for the links to the Qt documentation
QMAKE_DOCS_INSTALLDIR =
defineReplace(cmdEnv) {
!equals(QMAKE_DIR_SEP, /): 1 ~= s,^(.*)$,(set \\1) &&,g
return("$$1")
}
defineReplace(qdoc) {
return("$$cmdEnv(SRCDIR=$$PWD OUTDIR=$$1 QTC_VERSION=$$QTCREATOR_VERSION QTC_VERSION_TAG=$$VERSION_TAG QTC_LICENSE_TYPE=$$LICENSE_TYPE $$QDOC_GLOBAL) $$QDOC_BIN")
}
QHP_FILE = $$OUT_PWD/doc/html/qtcreator.qhp
QCH_FILE = $$IDE_DOC_PATH/qtcreator.qch
HELP_DEP_FILES = $$PWD/src/qtcreator.qdoc \
$$PWD/config/macros.qdocconf \
$$PWD/config/qt-cpp-ignore.qdocconf \
$$PWD/config/qt-defines.qdocconf
html_docs.commands = $$qdoc($$OUT_PWD/doc/html) $$PWD/qtcreator.qdocconf
html_docs.depends += $$HELP_DEP_FILES
html_docs.files = $$QHP_FILE
html_docs_online.commands = $$qdoc($$OUT_PWD/doc/html) $$PWD/qtcreator-online.qdocconf
html_docs_online.depends += $$HELP_DEP_FILES
qch_docs.commands = $$HELPGENERATOR -o \"$$QCH_FILE\" $$QHP_FILE
qch_docs.depends += html_docs
DEV_QHP_FILE = $$OUT_PWD/doc/html-dev/qtcreator-dev.qhp
DEV_QCH_FILE = $$IDE_DOC_PATH/qtcreator-dev.qch
DEV_HELP_DEP_FILES = \
$$PWD/api/qtcreator-api.qdoc \
$$PWD/api/coding-style.qdoc \
$$PWD/api/external-tool-spec.qdoc \
$$PWD/api/qtcreator-dev.qdoc \
$$PWD/api/qtcreator-dev-wizards.qdoc \
$$PWD/api/creating-plugins.qdoc \
$$PWD/api/getting-and-building.qdoc \
$$PWD/api/first-plugin.qdoc \
$$PWD/api/plugin-metadata.qdoc \
$$PWD/api/plugin-lifecycle.qdoc \
$$PWD/api/pluginmanager.qdoc \
$$PWD/api/qtcreator-documentation.qdoc \
$$PWD/api/qtcreator-ui-text.qdoc \
$$PWD/api/qtcreator-dev.qdocconf
dev_html_docs.commands = $$qdoc($$OUT_PWD/doc/html-dev) $$PWD/api/qtcreator-dev.qdocconf
dev_html_docs.depends += $$DEV_HELP_DEP_FILES
dev_html_docs_online.commands = $$qdoc($$OUT_PWD/doc/html-dev) $$PWD/api/qtcreator-dev-online.qdocconf
dev_html_docs_online.depends += $$DEV_HELP_DEP_FILES
dev_qch_docs.commands = $$HELPGENERATOR -o \"$$DEV_QCH_FILE\" $$DEV_QHP_FILE
dev_qch_docs.depends += dev_html_docs
inst_qch_docs.files = $$QCH_FILE
inst_qch_docs.path = $$INSTALL_DOC_PATH
inst_qch_docs.CONFIG += no_check_exist no_default_install
INSTALLS += inst_qch_docs
inst_dev_qch_docs.files = $$DEV_QCH_FILE
inst_dev_qch_docs.path = $$INSTALL_DOC_PATH
inst_dev_qch_docs.CONFIG += no_check_exist no_default_install
INSTALLS += inst_dev_qch_docs
install_docs.depends = install_inst_qch_docs install_inst_dev_qch_docs
QMAKE_EXTRA_TARGETS += install_docs
docs_online.depends = html_docs_online dev_html_docs_online
docs.depends = qch_docs dev_qch_docs
QMAKE_EXTRA_TARGETS += html_docs dev_html_docs html_docs_online dev_html_docs_online qch_docs dev_qch_docs docs docs_online
DISTFILES = $$HELP_DEP_FILES $$DEV_HELP_DEP_FILES
fixnavi.commands = \ fixnavi.commands = \
cd $$shell_path($$PWD) && \ cd $$shell_path($$PWD) && \

View File

@@ -74,8 +74,6 @@ for my $file (@files) {
$inif = 0; $inif = 0;
$skipping = 0; $skipping = 0;
$define_skip = ""; $define_skip = "";
} elsif (keys(%title2page) == 1 && /^\h*\\section1 Table Of Contents/) {
$havetoc = 1;
} elsif ($havetoc && /^\h*\\list/) { } elsif ($havetoc && /^\h*\\list/) {
$intoc++; $intoc++;
} elsif ($intoc) { } elsif ($intoc) {
@@ -110,7 +108,11 @@ for my $file (@files) {
} }
$title2type{$1} = $curtype; $title2type{$1} = $curtype;
$title2page{$1} = $curpage; $title2page{$1} = $curpage;
$doctitle = $1 if (!$doctitle); if ($1 eq "Qt Creator TOC") {
$havetoc = 1;
} elsif (!$doctitle) {
$doctitle = $1;
}
$curpage = ""; $curpage = "";
$inhdr = 0; $inhdr = 0;
} }

216
doc/src/qtcreator-toc.qdoc Normal file
View File

@@ -0,0 +1,216 @@
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Creator documentation.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
**
****************************************************************************/
/*!
\contentspage {Qt Creator}
\page qtcreator-toc.html
\title Qt Creator TOC
This file is used only for generating the TOC for the help file to be
displayed in the Qt Creator Help mode Contents view.
\list
\li \l{Getting Started}
\list
\li \l{IDE Overview}
\li \l{User Interface}
\li \l{Configuring Qt Creator}
\li \l{Building and Running an Example}
\li \l{Tutorials}
\list
\li \l{Creating a Qt Quick Application}
\li \l{Creating a Qt Widget Based Application}
\li \l{Creating a Mobile Application}
\endlist
\endlist
\li \l{Managing Projects}
\list
\li \l{Creating Projects}
\list
\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}
\list
\li \l{Using Bazaar}
\li \l{Using ClearCase}
\li \l{Using CVS}
\li \l{Using Git}
\li \l{Using Mercurial}
\li \l{Using Perforce}
\li \l{Using Subversion}
\endlist
\li \l{Configuring Projects}
\list
\li \l{Adding Kits}
\li \l{Adding Qt Versions}
\li \l{Adding Compilers}
\li \l{Adding Debuggers}
\li \l{Specifying Build Settings}
\li \l{Specifying Run Settings}
\li \l{Specifying Editor Settings}
\li \l{Specifying Code Style Settings}
\li \l{Specifying Dependencies}
\li \l{Sharing Project Settings}
\endlist
\li \l{Managing Sessions}
\endlist
\li \l{Designing User Interfaces}
\list
\li \l{Developing Qt Quick Applications}
\list
\li \l {Creating Qt Quick Projects}
\li \l {Qt Quick UI Forms}
\li \l {Using Qt Quick Designer}
\li \l {Editing PathView Properties}
\li \l {Adding Connections}
\li \l {Creating Components}
\li \l {Creating Buttons}
\li \l {Creating Scalable Buttons and Borders}
\li \l {Creating Screens}
\li \l {Browsing ISO 7000 Icons}
\li \l {Exporting Designs from Graphics Software}
\li \l {Using QML Modules with Plugins}
\endlist
\li \l{Developing Widget Based Applications}
\list
\li \l{Adding Qt Designer Plugins}
\endlist
\li \l{Optimizing Applications for Mobile Devices}
\endlist
\li \l{Coding}
\list
\li \l{Writing Code}
\list
\li \l{Working in Edit Mode}
\li \l{Semantic Highlighting}
\li \l{Checking Code Syntax}
\li \l{Completing Code}
\li \l{Indenting Text or Code}
\li \l{Using Qt Quick Toolbars}
\li \l{Pasting and Fetching Code Snippets}
\li \l{Using Text Editing Macros}
\li \l{Comparing Files}
\li \l{Parsing C++ Files with the Clang Code Model}
\endlist
\li \l{Finding}
\list
\li \l{Finding and Replacing}
\li \l{Searching with the Locator}
\endlist
\li \l{Refactoring}
\li \l{Beautifying Source Code}
\li \l{Configuring the Editor}
\list
\li \l{Specifying Text Editor Settings}
\li \l{Using FakeVim Mode}
\endlist
\li \l{Editing MIME Types}
\li \l{Modeling}
\li \l{Editing State Charts}
\endlist
\li \l{Building and Running}
\list
\li \l{Building for Multiple Platforms}
\li \l{Running on Multiple Platforms}
\li \l{Deploying to Mobile Devices}
\list
\li \l{Deploying Applications to Android Devices}
\li \l{Deploying Applications to Embedded Linux Devices}
\li \l{Deploying Applications to QNX Neutrino Devices}
\endlist
\li \l{Connecting Mobile Devices}
\list
\li \l{Connecting Android Devices}
\li \l{Connecting Bare Metal Devices}
\li \l{Connecting Embedded Linux Devices}
\li \l{Connecting iOS Devices}
\li \l{Connecting QNX Devices}
\li \l{Connecting Windows Runtime Devices}
\endlist
\li \l{Customizing the Build Process}
\endlist
\li \l{Testing}
\list
\li \l{Debugging}
\list
\li \l{Setting Up Debugger}
\li \l{Launching the Debugger}
\li \l{Interacting with the Debugger}
\li \l{Using Debugging Helpers}
\li \l{Debugging Qt Quick Projects}
\li \l{Debugging a C++ Example Application}
\li \l{Debugging a Qt Quick Example Application}
\li \l{Troubleshooting Debugger}
\endlist
\li \l{Analyzing Code}
\list
\li \l{Profiling QML Applications}
\li \l{Using Valgrind Code Analysis Tools}
\list
\li \l{Detecting Memory Leaks}
\li \l{Profiling Function Execution}
\li \l{Running Valgrind Tools on External Applications}
\endlist
\li \l{Using Clang Static Analyzer}
\li \l{Analyzing CPU Usage}
\endlist
\li \l{Running Autotests}
\endlist
\li \l{Advanced Use}
\list
\li \l{Supported Platforms}
\li \l{Using Other Build Systems}
\list
\li \l{Setting Up CMake}
\li \l{Setting Up Qbs}
\li \l{Setting Up an Autotools Project}
\li \l{Setting Up a Generic Project}
\endlist
\li \l{Using Command Line Options}
\li \l{Keyboard Shortcuts}
\li \l{Using External Tools}
\li \l{Showing Task List Files in Issues Pane}
\endlist
\li \l{Getting Help}
\list
\li \l{Using the Help Mode}
\li \l{FAQ}
\li \l{Tips and Tricks}
\li \l{Known Issues}
\li \l{Glossary}
\li \l{Technical Support}
\li \l{Acknowledgements}
\endlist
\endlist
*/

View File

@@ -132,189 +132,4 @@
\l{http://lists.qt-project.org/mailman/listinfo/} \l{http://lists.qt-project.org/mailman/listinfo/}
{lists.qt-project.org Mailing Lists}. {lists.qt-project.org Mailing Lists}.
\endtable \endtable
\omit
\section1 Table Of Contents
\list
\li \l{Getting Started}
\list
\li \l{IDE Overview}
\li \l{User Interface}
\li \l{Configuring Qt Creator}
\li \l{Building and Running an Example}
\li \l{Tutorials}
\list
\li \l{Creating a Qt Quick Application}
\li \l{Creating a Qt Widget Based Application}
\li \l{Creating a Mobile Application}
\endlist
\endlist
\li \l{Managing Projects}
\list
\li \l{Creating Projects}
\list
\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}
\list
\li \l{Using Bazaar}
\li \l{Using ClearCase}
\li \l{Using CVS}
\li \l{Using Git}
\li \l{Using Mercurial}
\li \l{Using Perforce}
\li \l{Using Subversion}
\endlist
\li \l{Configuring Projects}
\list
\li \l{Adding Kits}
\li \l{Adding Qt Versions}
\li \l{Adding Compilers}
\li \l{Adding Debuggers}
\li \l{Specifying Build Settings}
\li \l{Specifying Run Settings}
\li \l{Specifying Editor Settings}
\li \l{Specifying Code Style Settings}
\li \l{Specifying Dependencies}
\li \l{Sharing Project Settings}
\endlist
\li \l{Managing Sessions}
\endlist
\li \l{Designing User Interfaces}
\list
\li \l{Developing Qt Quick Applications}
\list
\li \l {Creating Qt Quick Projects}
\li \l {Qt Quick UI Forms}
\li \l {Using Qt Quick Designer}
\li \l {Editing PathView Properties}
\li \l {Adding Connections}
\li \l {Creating Components}
\li \l {Creating Buttons}
\li \l {Creating Scalable Buttons and Borders}
\li \l {Creating Screens}
\li \l {Browsing ISO 7000 Icons}
\li \l {Exporting Designs from Graphics Software}
\li \l {Using QML Modules with Plugins}
\endlist
\li \l{Developing Widget Based Applications}
\list
\li \l{Adding Qt Designer Plugins}
\endlist
\li \l{Optimizing Applications for Mobile Devices}
\endlist
\li \l{Coding}
\list
\li \l{Writing Code}
\list
\li \l{Working in Edit Mode}
\li \l{Semantic Highlighting}
\li \l{Checking Code Syntax}
\li \l{Completing Code}
\li \l{Indenting Text or Code}
\li \l{Using Qt Quick Toolbars}
\li \l{Pasting and Fetching Code Snippets}
\li \l{Using Text Editing Macros}
\li \l{Comparing Files}
\li \l{Parsing C++ Files with the Clang Code Model}
\endlist
\li \l{Finding}
\list
\li \l{Finding and Replacing}
\li \l{Searching with the Locator}
\endlist
\li \l{Refactoring}
\li \l{Beautifying Source Code}
\li \l{Configuring the Editor}
\list
\li \l{Specifying Text Editor Settings}
\li \l{Using FakeVim Mode}
\endlist
\li \l{Editing MIME Types}
\li \l{Modeling}
\li \l{Editing State Charts}
\endlist
\li \l{Building and Running}
\list
\li \l{Building for Multiple Platforms}
\li \l{Running on Multiple Platforms}
\li \l{Deploying to Mobile Devices}
\list
\li \l{Deploying Applications to Android Devices}
\li \l{Deploying Applications to Embedded Linux Devices}
\li \l{Deploying Applications to QNX Neutrino Devices}
\endlist
\li \l{Connecting Mobile Devices}
\list
\li \l{Connecting Android Devices}
\li \l{Connecting Bare Metal Devices}
\li \l{Connecting Embedded Linux Devices}
\li \l{Connecting iOS Devices}
\li \l{Connecting QNX Devices}
\li \l{Connecting Windows Runtime Devices}
\endlist
\li \l{Customizing the Build Process}
\endlist
\li \l{Testing}
\list
\li \l{Debugging}
\list
\li \l{Setting Up Debugger}
\li \l{Launching the Debugger}
\li \l{Interacting with the Debugger}
\li \l{Using Debugging Helpers}
\li \l{Debugging Qt Quick Projects}
\li \l{Debugging a C++ Example Application}
\li \l{Debugging a Qt Quick Example Application}
\li \l{Troubleshooting Debugger}
\endlist
\li \l{Analyzing Code}
\list
\li \l{Profiling QML Applications}
\li \l{Using Valgrind Code Analysis Tools}
\list
\li \l{Detecting Memory Leaks}
\li \l{Profiling Function Execution}
\li \l{Running Valgrind Tools on External Applications}
\endlist
\li \l{Using Clang Static Analyzer}
\li \l{Analyzing CPU Usage}
\endlist
\li \l{Running Autotests}
\endlist
\li \l{Advanced Use}
\list
\li \l{Supported Platforms}
\li \l{Using Other Build Systems}
\list
\li \l{Setting Up CMake}
\li \l{Setting Up Qbs}
\li \l{Setting Up an Autotools Project}
\li \l{Setting Up a Generic Project}
\endlist
\li \l{Using Command Line Options}
\li \l{Keyboard Shortcuts}
\li \l{Using External Tools}
\li \l{Showing Task List Files in Issues Pane}
\endlist
\li \l{Getting Help}
\list
\li \l{Using the Help Mode}
\li \l{FAQ}
\li \l{Tips and Tricks}
\li \l{Known Issues}
\li \l{Glossary}
\li \l{Technical Support}
\li \l{Acknowledgements}
\endlist
\endlist
\endomit
*/ */

54
docs.pri Normal file
View File

@@ -0,0 +1,54 @@
# adapted from qt_docs.prf
isEmpty(VERSION): error("Include qtcreator.pri before including docs.pri!")
qtcver.name = QTC_VERSION
qtcver.value = $$VERSION
qtcvertag.name = QTC_VERSION_TAG
qtcvertag.value = $$replace(qtcver.value, \.,)
qtdocs.name = QT_INSTALL_DOCS
qtdocs.value = $$[QT_INSTALL_DOCS/src]
qdocindex.name = QDOC_INDEX_DIR
qdocindex.value = $$[QT_INSTALL_DOCS]
qtcdocsdir.name = QTC_DOCS_DIR
qtcdocsdir.value = $$IDE_SOURCE_TREE/doc
QT_TOOL_ENV = qtcver qtcvertag qtdocs qdocindex qtcdocsdir
qtPrepareTool(QDOC, qdoc)
QT_TOOL_ENV =
!build_online_docs: qtPrepareTool(QHELPGENERATOR, qhelpgenerator)
QTC_DOCS_BASE_OUTDIR = $$OUT_PWD/doc
DOC_INDEXES = -indexdir $$shell_quote($$[QT_INSTALL_DOCS]) \
-indexdir $$shell_quote($$IDE_BUILD_TREE/doc)
for (qtc_doc, QTC_DOCS) {
!exists($$qtc_doc): error("Cannot find documentation specification file $$qtc_doc")
QTC_DOCS_TARGET = $$replace(qtc_doc, ^(.*/)?(.*)\\.qdocconf$, \\2)
QTC_DOCS_TARGETDIR = $$QTC_DOCS_TARGET
QTC_DOCS_OUTPUTDIR = $$QTC_DOCS_BASE_OUTDIR/$$QTC_DOCS_TARGETDIR
!isEmpty(html_docs.commands): html_docs.commands += &&
html_docs.commands += $$QDOC -outputdir $$shell_quote($$QTC_DOCS_OUTPUTDIR) $$qtc_doc $$DOC_INDEXES
!build_online_docs {
!isEmpty(qch_docs.commands): qch_docs.commands += &&
qch_docs.commands += $$QHELPGENERATOR $$shell_quote($$QTC_DOCS_OUTPUTDIR/$${QTC_DOCS_TARGET}.qhp) -o $$shell_quote($$IDE_DOC_PATH/$${QTC_DOCS_TARGET}.qch)
inst_qch_docs.files += $$IDE_DOC_PATH/$${QTC_DOCS_TARGET}.qch
}
}
!build_online_docs {
qch_docs.depends = html_docs
inst_qch_docs.path = $$INSTALL_DOC_PATH
inst_qch_docs.CONFIG += no_check_exist no_default_install no_build
install_docs.depends = install_inst_qch_docs
docs.depends = qch_docs
INSTALLS += inst_qch_docs
QMAKE_EXTRA_TARGETS += qch_docs install_docs
} else {
docs.depends = html_docs
}
QMAKE_EXTRA_TARGETS += html_docs docs

View File

@@ -19,7 +19,6 @@ Product {
property string versionTag: qtc.qtcreator_version.replace(/\.|-/g, "") property string versionTag: qtc.qtcreator_version.replace(/\.|-/g, "")
Qt.core.qdocEnvironment: [ Qt.core.qdocEnvironment: [
"QTC_LICENSE_TYPE=" + project.licenseType,
"QTC_VERSION=" + qtc.qtcreator_version, "QTC_VERSION=" + qtc.qtcreator_version,
"QTC_VERSION_TAG=" + qtc.qtcreator_version, "QTC_VERSION_TAG=" + qtc.qtcreator_version,
"SRCDIR=" + sourceDirectory, "SRCDIR=" + sourceDirectory,

View File

@@ -6,7 +6,6 @@ Project {
name: "Qt Creator" name: "Qt Creator"
minimumQbsVersion: "1.6.0" minimumQbsVersion: "1.6.0"
property bool withAutotests: qbs.buildVariant === "debug" property bool withAutotests: qbs.buildVariant === "debug"
property string licenseType: "opensource"
property path ide_source_tree: path property path ide_source_tree: path
property pathList additionalPlugins: [] property pathList additionalPlugins: []
property pathList additionalLibs: [] property pathList additionalLibs: []

View File

@@ -2427,15 +2427,17 @@ static bool dumpQDateTime(const SymbolGroupValue &v, std::wostream &str, std::st
int status = 0; int status = 0;
int tiVersion = QtInfo::qtTypeInfoVersion(v.context()); int tiVersion = QtInfo::qtTypeInfoVersion(v.context());
if (tiVersion > 10) { if (tiVersion > 10) {
const ULONG64 address =
SymbolGroupValue::isPointerType(v.type()) ? v.pointerValue() : v.address();
const ULONG64 data = SymbolGroupValue::readUnsignedValue( const ULONG64 data = SymbolGroupValue::readUnsignedValue(
v.context().dataspaces, v.address(), 8, 0); v.context().dataspaces, address, 8, 0);
status = data & 0xFF; status = data & 0xFF;
ULONG64 timeZone = 0; ULONG64 timeZone = 0;
if (status & 0x01) { if (status & 0x01) {
msecs = data >> 8; msecs = data >> 8;
spec = (status & 0x30) >> 4; spec = (status & 0x30) >> 4;
} else { } else {
ULONG64 addr = SymbolGroupValue::readPointerValue(v.context().dataspaces, v.address()); ULONG64 addr = SymbolGroupValue::readPointerValue(v.context().dataspaces, address);
msecs = SymbolGroupValue::readSignedValue(v.context().dataspaces, addr, 8, 0); msecs = SymbolGroupValue::readSignedValue(v.context().dataspaces, addr, 8, 0);
addr += 8 /*int64*/; addr += 8 /*int64*/;
@@ -3222,7 +3224,7 @@ unsigned dumpSimpleType(SymbolGroupNode *n, const SymbolGroupValueContext &ctx,
break; break;
} }
} }
if (rc != SymbolGroupNode::SimpleDumperFailed && SymbolGroupValue::isPointerType(v.type())) if (rc != SymbolGroupNode::SimpleDumperFailed && SymbolGroupValue::isPointerType(v.type()) && encoding->empty())
str << L" @" << std::showbase << std::hex << v.pointerValue() << std::dec << std::noshowbase; str << L" @" << std::showbase << std::hex << v.pointerValue() << std::dec << std::noshowbase;
if (rc == SymbolGroupNode::SimpleDumperOk) if (rc == SymbolGroupNode::SimpleDumperOk)

View File

@@ -160,10 +160,13 @@ Command ArtisticStyle::command(const QString &cfgFile) const
command.addOption("-q"); command.addOption("-q");
command.addOption("--options=" + cfgFile); command.addOption("--options=" + cfgFile);
if (m_settings->version() > ArtisticStyleSettings::Version_2_03) { const int version = m_settings->version();
if (version > ArtisticStyleSettings::Version_2_03) {
command.setProcessing(Command::PipeProcessing); command.setProcessing(Command::PipeProcessing);
command.setPipeAddsNewline(true); if (version == ArtisticStyleSettings::Version_2_04)
command.setPipeAddsNewline(true);
command.setReturnsCRLF(Utils::HostOsInfo::isWindowsHost()); command.setReturnsCRLF(Utils::HostOsInfo::isWindowsHost());
command.addOption("-z2");
} else { } else {
command.addOption("%file"); command.addOption("%file");
} }

View File

@@ -40,7 +40,8 @@ class ArtisticStyleSettings : public AbstractSettings
public: public:
enum ArtisticStyleVersion { enum ArtisticStyleVersion {
Version_2_03 = 203 Version_2_03 = 203,
Version_2_04 = 204
}; };
ArtisticStyleSettings(); ArtisticStyleSettings();

View File

@@ -574,15 +574,32 @@ void QmlEngine::notifyEngineRemoteSetupFinished(const RemoteSetupResult &result)
if (result.qmlServerPort.isValid()) if (result.qmlServerPort.isValid())
runParameters().qmlServer.port = result.qmlServerPort; runParameters().qmlServer.port = result.qmlServerPort;
notifyEngineSetupOk(); switch (state()) {
case InferiorSetupOk:
// FIXME: This is not a legal transition, but we need to
// get to EngineSetupOk somehow from InferiorSetupOk.
// fallthrough. QTCREATORBUG-14089.
case EngineSetupRequested:
notifyEngineSetupOk();
break;
case EngineSetupOk:
case EngineRunRequested:
// QTCREATORBUG-17718: On Android while doing debugging in mixed mode, the QML debug engine
// sometimes reports EngineSetupOK after the EngineRunRequested thus overwriting the state
// which eventually results into app to waiting for the QML engine connection.
// Skipping the EngineSetupOK in aforementioned case.
// Nothing to do here. The setup is already done.
break;
default:
QTC_ASSERT(false, qDebug() << "Unexpected state" << state());
}
// The remote setup can take while especialy with mixed debugging. // The remote setup can take while especialy with mixed debugging.
// Just waiting for 8 seconds is not enough. Increase the timeout // Just waiting for 8 seconds is not enough. Increase the timeout
// to 60 s // to 60 s
// In case we get an output the d->outputParser will start the connection. // In case we get an output the d->outputParser will start the connection.
d->noDebugOutputTimer.setInterval(60000); d->noDebugOutputTimer.setInterval(60000);
} } else {
else {
if (isMasterEngine()) if (isMasterEngine())
QMessageBox::critical(ICore::dialogParent(), tr("Failed to start application"), QMessageBox::critical(ICore::dialogParent(), tr("Failed to start application"),
tr("Application startup failed: %1").arg(result.reason)); tr("Application startup failed: %1").arg(result.reason));

View File

@@ -728,16 +728,13 @@ void GitClient::requestReload(const QString &documentId, const QString &source,
IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title); IDocument *document = DiffEditorController::findOrCreateDocument(documentId, title);
QTC_ASSERT(document, return); QTC_ASSERT(document, return);
DiffEditorController *controller = DiffEditorController::controller(document); DiffEditorController *controller = factory(document);
if (!controller) { QTC_ASSERT(controller, return);
controller = factory(document);
QTC_ASSERT(controller, return);
connect(controller, &DiffEditorController::chunkActionsRequested, connect(controller, &DiffEditorController::chunkActionsRequested,
this, &GitClient::slotChunkActionsRequested, Qt::DirectConnection); this, &GitClient::slotChunkActionsRequested, Qt::DirectConnection);
connect(controller, &DiffEditorController::requestInformationForCommit, connect(controller, &DiffEditorController::requestInformationForCommit,
this, &GitClient::branchesForCommit); this, &GitClient::branchesForCommit);
}
VcsBasePlugin::setSource(document, sourceCopy); VcsBasePlugin::setSource(document, sourceCopy);
EditorManager::activateEditorForDocument(document); EditorManager::activateEditorForDocument(document);

View File

@@ -151,6 +151,8 @@ typedef int (MDEV_API *AMDeviceSecureInstallApplicationPtr)(int, AMDeviceRef, CF
namespace Ios { namespace Ios {
namespace Internal { namespace Internal {
static const am_res_t kAMDMobileImageMounterImageMountFailed = 0xe8000076;
class MobileDeviceLib { class MobileDeviceLib {
public : public :
MobileDeviceLib(); MobileDeviceLib();
@@ -1033,12 +1035,13 @@ bool CommandSession::mountDeveloperDiskImage() {
if (connectDevice()) { if (connectDevice()) {
CFStringRef cfImgPath = imagePath.toCFString(); CFStringRef cfImgPath = imagePath.toCFString();
if (am_res_t result = lib()->deviceMountImage(device, cfImgPath, options, &mountCallback, 0)) { am_res_t result = lib()->deviceMountImage(device, cfImgPath, options, &mountCallback, 0);
if (result == 0 || result == kAMDMobileImageMounterImageMountFailed) {
// Mounting succeeded or developer image already installed
success = true;
} else {
addError(QString::fromLatin1("Mount Developer Disk Image \"%1\" failed, AMDeviceMountImage returned %2 (0x%3)") addError(QString::fromLatin1("Mount Developer Disk Image \"%1\" failed, AMDeviceMountImage returned %2 (0x%3)")
.arg(imagePath).arg(mobileDeviceErrorString(lib(), result)).arg(QString::number(result, 16))); .arg(imagePath).arg(mobileDeviceErrorString(lib(), result)).arg(QString::number(result, 16)));
} else {
// Mounting succeeded.
success = true;
} }
CFRelease(cfImgPath); CFRelease(cfImgPath);
disconnectDevice(); disconnectDevice();

View File

@@ -110,6 +110,7 @@
:New.templateCategoryView_QTreeView {name='templateCategoryView' type='QTreeView' visible='1' window=':New_Core::Internal::NewDialog'} :New.templateCategoryView_QTreeView {name='templateCategoryView' type='QTreeView' visible='1' window=':New_Core::Internal::NewDialog'}
:New_Core::Internal::NewDialog {name='Core__Internal__NewDialog' type='Core::Internal::NewDialog' visible='1' windowTitle?='New*'} :New_Core::Internal::NewDialog {name='Core__Internal__NewDialog' type='Core::Internal::NewDialog' visible='1' windowTitle?='New*'}
:Next_QPushButton {text~='(Next.*|Continue)' type='QPushButton' visible='1'} :Next_QPushButton {text~='(Next.*|Continue)' type='QPushButton' visible='1'}
:No valid kits found._QLabel {text?='*No valid kits found.*' type='QLabel' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow'}
:OpenDocuments_Widget {type='Core::Internal::OpenEditorsWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Open Documents'} :OpenDocuments_Widget {type='Core::Internal::OpenEditorsWidget' unnamed='1' visible='1' window=':Qt Creator_Core::Internal::MainWindow' windowTitle='Open Documents'}
:Options.Cancel_QPushButton {text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'} :Options.Cancel_QPushButton {text='Cancel' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'}
:Options.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'} :Options.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Options_Core::Internal::SettingsDialog'}
@@ -176,6 +177,7 @@
:QtSupport__Internal__QtVersionManager.errorLabel.QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='errorLabel' type='QLabel' visible='1'} :QtSupport__Internal__QtVersionManager.errorLabel.QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='errorLabel' type='QLabel' visible='1'}
:QtSupport__Internal__QtVersionManager.qmake_QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'} :QtSupport__Internal__QtVersionManager.qmake_QLabel {container=':qt_tabwidget_stackedwidget.QtSupport__Internal__QtVersionManager_QtSupport::Internal::QtOptionsPageWidget' name='qmakePath' type='QLabel' visible='1'}
:QtVersionLabel_KitPage {container=':qt_tabwidget_stackedwidget_QWidget' text='Qt version:' type='QLabel' unnamed='1' visible='1'} :QtVersionLabel_KitPage {container=':qt_tabwidget_stackedwidget_QWidget' text='Qt version:' type='QLabel' unnamed='1' visible='1'}
:Remove_QPushButton {container=':qt_tabwidget_stackedwidget_QScrollArea' text='Remove' type='QPushButton' unnamed='1' visible='1'}
:Restart required.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Restart required_QMessageBox'} :Restart required.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Restart required_QMessageBox'}
:Restart required_QMessageBox {text='The language change will take effect after a restart of Qt Creator.' type='QMessageBox' unnamed='1' visible='1'} :Restart required_QMessageBox {text='The language change will take effect after a restart of Qt Creator.' type='QMessageBox' unnamed='1' visible='1'}
:Revert to Saved.Proceed_QPushButton {text='Proceed' type='QPushButton' unnamed='1' visible='1' window=':Revert to Saved_QMessageBox'} :Revert to Saved.Proceed_QPushButton {text='Proceed' type='QPushButton' unnamed='1' visible='1' window=':Revert to Saved_QMessageBox'}

View File

@@ -28,7 +28,7 @@ import operator
# for easier re-usage (because Python hasn't an enum type) # for easier re-usage (because Python hasn't an enum type)
class Targets: class Targets:
ALL_TARGETS = map(lambda x: 2 ** x , range(6)) ALL_TARGETS = tuple(map(lambda x: 2 ** x , range(6)))
(DESKTOP_474_GCC, (DESKTOP_474_GCC,
DESKTOP_480_DEFAULT, DESKTOP_480_DEFAULT,
@@ -37,11 +37,20 @@ class Targets:
DESKTOP_541_GCC, DESKTOP_541_GCC,
DESKTOP_561_DEFAULT) = ALL_TARGETS DESKTOP_561_DEFAULT) = ALL_TARGETS
@staticmethod
def availableTargetClasses():
availableTargets = list(Targets.ALL_TARGETS)
if platform.system() in ('Windows', 'Microsoft'):
availableTargets.remove(Targets.EMBEDDED_LINUX)
elif platform.system() == 'Darwin':
availableTargets.remove(Targets.DESKTOP_541_GCC)
return availableTargets
@staticmethod @staticmethod
def desktopTargetClasses(): def desktopTargetClasses():
desktopTargets = (sum(Targets.ALL_TARGETS) & ~Targets.EMBEDDED_LINUX) desktopTargets = Targets.availableTargetClasses()
if platform.system() == 'Darwin': if Targets.EMBEDDED_LINUX in desktopTargets:
desktopTargets &= ~Targets.DESKTOP_541_GCC desktopTargets.remove(Targets.EMBEDDED_LINUX)
return desktopTargets return desktopTargets
@staticmethod @staticmethod
@@ -79,14 +88,6 @@ class Targets:
test.fatal("You've passed at least one unknown target!") test.fatal("You've passed at least one unknown target!")
return result return result
@staticmethod
def intToArray(targets):
return filter(lambda x: x & targets, Targets.ALL_TARGETS)
@staticmethod
def arrayToInt(targetArr):
return reduce(operator.or_, targetArr, 0)
@staticmethod @staticmethod
def getDefaultKit(): def getDefaultKit():
return Targets.DESKTOP_531_DEFAULT return Targets.DESKTOP_531_DEFAULT

View File

@@ -72,8 +72,8 @@ def openCmakeProject(projectPath, buildDir):
invokeMenuItem("File", "Open File or Project...") invokeMenuItem("File", "Open File or Project...")
selectFromFileDialog(projectPath) selectFromFileDialog(projectPath)
__chooseTargets__(0) # uncheck all __chooseTargets__([]) # uncheck all
__chooseTargets__(Targets.DESKTOP_480_DEFAULT, additionalFunc=additionalFunction) __chooseTargets__([Targets.DESKTOP_480_DEFAULT], additionalFunc=additionalFunction)
clickButton(waitForObject(":Qt Creator.Configure Project_QPushButton")) clickButton(waitForObject(":Qt Creator.Configure Project_QPushButton"))
return True return True
@@ -344,7 +344,7 @@ def createEmptyQtProject(workingDir=None, projectName=None, targets=Targets.desk
__createProjectHandleLastPage__() __createProjectHandleLastPage__()
return projectName, checkedTargets return projectName, checkedTargets
def createNewNonQtProject(workingDir=None, projectName=None, target=Targets.DESKTOP_474_GCC, def createNewNonQtProject(workingDir=None, projectName=None, target=[Targets.DESKTOP_474_GCC],
plainC=False, cmake=False, qbs=False): plainC=False, cmake=False, qbs=False):
if plainC: if plainC:
template = "Plain C Application" template = "Plain C Application"
@@ -373,7 +373,7 @@ def createNewNonQtProject(workingDir=None, projectName=None, target=Targets.DESK
return projectName return projectName
def createNewCPPLib(projectDir = None, projectName = None, className = None, fromWelcome = False, def createNewCPPLib(projectDir = None, projectName = None, className = None, fromWelcome = False,
target = Targets.DESKTOP_474_GCC, isStatic = False, modules = ["QtCore"]): target = [Targets.DESKTOP_474_GCC], isStatic = False, modules = ["QtCore"]):
available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True) available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True)
if isStatic: if isStatic:
libType = LibType.STATIC libType = LibType.STATIC
@@ -391,7 +391,7 @@ def createNewCPPLib(projectDir = None, projectName = None, className = None, fro
return checkedTargets, projectName, className return checkedTargets, projectName, className
def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWelcome=False, def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWelcome=False,
target=Targets.DESKTOP_474_GCC, baseClass="QGenericPlugin"): target=[Targets.DESKTOP_474_GCC], baseClass="QGenericPlugin"):
available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True) available = __createProjectOrFileSelectType__(" Library", "C++ Library", fromWelcome, True)
if projectDir == None: if projectDir == None:
projectDir = tempDir() projectDir = tempDir()
@@ -403,25 +403,21 @@ def createNewQtPlugin(projectDir=None, projectName=None, className=None, fromWel
__createProjectHandleLastPage__() __createProjectHandleLastPage__()
return checkedTargets, projectName, className return checkedTargets, projectName, className
# parameter target can be an OR'd value of Targets # parameter target can be a list of Targets
# parameter availableTargets should be the result of __createProjectOrFileSelectType__() # parameter availableTargets should be the result of __createProjectOrFileSelectType__()
# or use None as a fallback # or use None as a fallback
# parameter additionalFunc function to be executed inside the detailed view of each chosen kit # parameter additionalFunc function to be executed inside the detailed view of each chosen kit
# if present, 'Details' button will be clicked, function will be executed, # if present, 'Details' button will be clicked, function will be executed,
# 'Details' button will be clicked again # 'Details' button will be clicked again
def __chooseTargets__(targets=Targets.DESKTOP_474_GCC, availableTargets=None, additionalFunc=None): def __chooseTargets__(targets=[Targets.DESKTOP_474_GCC], availableTargets=None, additionalFunc=None):
if availableTargets != None: if availableTargets != None:
available = availableTargets available = availableTargets
else: else:
# following targets depend on the build environment - added for further/later tests # following targets depend on the build environment - added for further/later tests
available = list(Targets.ALL_TARGETS) available = Targets.availableTargetClasses()
if platform.system() in ('Windows', 'Microsoft'):
available.remove(Targets.EMBEDDED_LINUX)
elif platform.system() == 'Darwin':
available.remove(Targets.DESKTOP_541_GCC)
checkedTargets = [] checkedTargets = []
for current in available: for current in available:
mustCheck = targets & current == current mustCheck = current in targets
try: try:
ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current), ensureChecked("{type='QCheckBox' text='%s' visible='1'}" % Targets.getStringForTarget(current),
mustCheck, 3000) mustCheck, 3000)
@@ -660,10 +656,7 @@ def __getSupportedPlatforms__(text, templateName, getAsStrings=False):
if platform.system() != 'Darwin': if platform.system() != 'Darwin':
result.append(Targets.DESKTOP_541_GCC) result.append(Targets.DESKTOP_541_GCC)
elif 'Platform independent' in text: elif 'Platform independent' in text:
result = list(Targets.ALL_TARGETS) result = Targets.desktopTargetClasses()
result.remove(Targets.EMBEDDED_LINUX)
if platform.system() == 'Darwin':
result.remove(Targets.DESKTOP_541_GCC)
else: else:
test.warning("Returning None (__getSupportedPlatforms__())", test.warning("Returning None (__getSupportedPlatforms__())",
"Parsed text: '%s'" % text) "Parsed text: '%s'" % text)

View File

@@ -80,7 +80,8 @@ def main():
checkSimpleCppLib("SampleApp2", True) checkSimpleCppLib("SampleApp2", True)
# Qt Plugin needs Qt4.8 for QGenericPlugin which is tested by default # Qt Plugin needs Qt4.8 for QGenericPlugin which is tested by default
targets = Targets.desktopTargetClasses() & ~Targets.DESKTOP_474_GCC targets = Targets.desktopTargetClasses()
targets.remove(Targets.DESKTOP_474_GCC)
checkedTargets, projectName, className = createNewQtPlugin(tempDir(), "SampleApp3", "MyPlugin", checkedTargets, projectName, className = createNewQtPlugin(tempDir(), "SampleApp3", "MyPlugin",
target=targets) target=targets)
virtualFunctionsAdded = False virtualFunctionsAdded = False

View File

@@ -40,7 +40,9 @@ def main():
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
# open example project, supports only Qt 5 # open example project, supports only Qt 5
targets = Targets.desktopTargetClasses() & ~Targets.DESKTOP_474_GCC & ~Targets.DESKTOP_480_DEFAULT targets = Targets.desktopTargetClasses()
targets.remove(Targets.DESKTOP_474_GCC)
targets.remove(Targets.DESKTOP_480_DEFAULT)
checkedTargets = openQmakeProject(examplePath, targets) checkedTargets = openQmakeProject(examplePath, targets)
# build and wait until finished - on all build configurations # build and wait until finished - on all build configurations
availableConfigs = iterateBuildConfigs(len(checkedTargets)) availableConfigs = iterateBuildConfigs(len(checkedTargets))

View File

@@ -174,7 +174,7 @@ def main():
for useClang in [False, True]: for useClang in [False, True]:
if not startCreator(useClang): if not startCreator(useClang):
continue continue
openQmakeProject(examplePath, Targets.DESKTOP_531_DEFAULT) openQmakeProject(examplePath, [Targets.DESKTOP_531_DEFAULT])
checkCodeModelSettings(useClang) checkCodeModelSettings(useClang)
if not openDocument("cplusplus-tools.Sources.main\\.cpp"): if not openDocument("cplusplus-tools.Sources.main\\.cpp"):
earlyExit("Failed to open main.cpp.") earlyExit("Failed to open main.cpp.")

View File

@@ -53,11 +53,18 @@ def main():
switchViewTo(ViewConstants.HELP) switchViewTo(ViewConstants.HELP)
manualQModelIndex = getQModelIndexStr("text?='Qt Creator Manual *'", manualQModelIndex = getQModelIndexStr("text?='Qt Creator Manual *'",
":Qt Creator_QHelpContentWidget") ":Qt Creator_QHelpContentWidget")
doubleClick(waitForObject(manualQModelIndex), 5, 5, 0, Qt.LeftButton) manualQMIObj = waitForObject(manualQModelIndex)
doubleClick(manualQMIObj, 5, 5, 0, Qt.LeftButton)
if not waitFor("not manualQMIObj.collapsed", 2000):
test.warning("It takes more than two seconds to expand the help content tree.")
mouseClick(waitForObject(getQModelIndexStr("text='Building and Running an Example'", mouseClick(waitForObject(getQModelIndexStr("text='Building and Running an Example'",
manualQModelIndex)), 5, 5, 0, Qt.LeftButton) manualQModelIndex)), 5, 5, 0, Qt.LeftButton)
helpSelector = waitForObject(":Qt Creator_HelpSelector_QComboBox") helpSelector = waitForObject(":Qt Creator_HelpSelector_QComboBox")
waitFor("str(helpSelector.currentText).startswith('Building and Running an Example')", 10000) pageOpened = "str(helpSelector.currentText).startswith('Building and Running an Example')"
if not waitFor(pageOpened, 10000):
test.fatal("Help page is not opened after ten seconds. Giving up.")
invokeMenuItem("File", "Exit")
return
# open bookmarks window # open bookmarks window
clickButton(waitForObject(":Qt Creator.Add Bookmark_QToolButton")) clickButton(waitForObject(":Qt Creator.Add Bookmark_QToolButton"))
clickButton(waitForObject(":Add Bookmark.ExpandBookmarksList_QToolButton")) clickButton(waitForObject(":Add Bookmark.ExpandBookmarksList_QToolButton"))

View File

@@ -80,7 +80,7 @@ def main():
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
# open example project # open example project
openQmakeProject(examplePath, Targets.DESKTOP_531_DEFAULT) openQmakeProject(examplePath, [Targets.DESKTOP_531_DEFAULT])
# open qml file # open qml file
openDocument("animation.Resources.animation\\.qrc./animation.basics.color-animation\\.qml") openDocument("animation.Resources.animation\\.qrc./animation.basics.color-animation\\.qml")
# get editor # get editor

View File

@@ -58,13 +58,12 @@ def main():
performDebugging(projectName, checkedTargets) performDebugging(projectName, checkedTargets)
invokeMenuItem("File", "Close All Projects and Editors") invokeMenuItem("File", "Close All Projects and Editors")
# C/C++ # C/C++
targets = Targets.intToArray(Targets.desktopTargetClasses())
for name,isC in {"C":True, "CPP":False}.items(): for name,isC in {"C":True, "CPP":False}.items():
for singleTarget in targets: for singleTarget in targets:
workingDir = tempDir() workingDir = tempDir()
qtVersion = re.search("\d{3}", Targets.getStringForTarget(singleTarget)).group() qtVersion = re.search("\d{3}", Targets.getStringForTarget(singleTarget)).group()
projectName = createNewNonQtProject(workingDir, "Sample%s%s" % (name, qtVersion), projectName = createNewNonQtProject(workingDir, "Sample%s%s" % (name, qtVersion),
singleTarget, isC) [singleTarget], isC)
if projectName == None: if projectName == None:
test.fail("Failed to create Sample%s%s" % (name, qtVersion), test.fail("Failed to create Sample%s%s" % (name, qtVersion),
"Target: %s, plainC: %s" % (Targets.getStringForTargt(singleTarget), isC)) "Target: %s, plainC: %s" % (Targets.getStringForTargt(singleTarget), isC))

View File

@@ -30,7 +30,8 @@ def main():
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
# Requires Qt 4.8 # Requires Qt 4.8
targets = Targets.desktopTargetClasses() & ~Targets.DESKTOP_474_GCC targets = Targets.desktopTargetClasses()
targets.remove(Targets.DESKTOP_474_GCC)
# using a temporary directory won't mess up a potentially existing # using a temporary directory won't mess up a potentially existing
workingDir = tempDir() workingDir = tempDir()
checkedTargets, projectName = createNewQtQuickApplication(workingDir, targets=targets) checkedTargets, projectName = createNewQtQuickApplication(workingDir, targets=targets)

View File

@@ -37,7 +37,7 @@ def main():
# add docs to have the correct tool tips # add docs to have the correct tool tips
addHelpDocumentation([os.path.join(Qt5Path.docsPath(target), "qtquick.qch")]) addHelpDocumentation([os.path.join(Qt5Path.docsPath(target), "qtquick.qch")])
templateDir = prepareTemplate(sourceExample, "/../../helper") templateDir = prepareTemplate(sourceExample, "/../../helper")
openQmakeProject(os.path.join(templateDir, proFile), target) openQmakeProject(os.path.join(templateDir, proFile), [target])
openDocument("focus.QML.qml" + os.sep + "focus.focus\\.qml") openDocument("focus.QML.qml" + os.sep + "focus.focus\\.qml")
testRenameId() testRenameId()
testFindUsages() testFindUsages()

View File

@@ -7,6 +7,6 @@ HOOK_SUB_PROCESSES=false
IMPLICITAUTSTART=0 IMPLICITAUTSTART=0
LANGUAGE=Python LANGUAGE=Python
OBJECTMAP=../objects.map OBJECTMAP=../objects.map
TEST_CASES=tst_build_speedcrunch tst_cmake_speedcrunch tst_create_proj_wizard tst_custom_wizard_check tst_default_settings tst_installed_languages tst_new_class tst_opencreator_qbs tst_openqt_creator tst_rename_file tst_save_before_build tst_session_handling tst_tasks_handling TEST_CASES=tst_build_speedcrunch tst_cmake_speedcrunch tst_create_proj_wizard tst_custom_wizard_check tst_default_settings tst_installed_languages tst_new_class tst_opencreator_qbs tst_openqt_creator tst_remove_kits tst_rename_file tst_save_before_build tst_session_handling tst_tasks_handling
VERSION=2 VERSION=2
WRAPPERS=Qt WRAPPERS=Qt

View File

@@ -42,7 +42,7 @@ def main():
startApplication("qtcreator" + SettingsPath) startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
checkedTargets = openQmakeProject(SpeedCrunchPath, Targets.DESKTOP_480_DEFAULT) checkedTargets = openQmakeProject(SpeedCrunchPath, [Targets.DESKTOP_480_DEFAULT])
progressBarWait(30000) progressBarWait(30000)
fancyToolButton = waitForObject(":*Qt Creator_Core::Internal::FancyToolButton") fancyToolButton = waitForObject(":*Qt Creator_Core::Internal::FancyToolButton")

View File

@@ -36,12 +36,12 @@ def main():
return return
runButton = findObject(':*Qt Creator.Run_Core::Internal::FancyToolButton') runButton = findObject(':*Qt Creator.Run_Core::Internal::FancyToolButton')
openQmakeProject(pathSpeedcrunch, Targets.DESKTOP_480_DEFAULT) openQmakeProject(pathSpeedcrunch, [Targets.DESKTOP_480_DEFAULT])
# Wait for parsing to complete # Wait for parsing to complete
waitFor("runButton.enabled", 30000) waitFor("runButton.enabled", 30000)
# Starting before opening, because this is where Creator froze (QTCREATORBUG-10733) # Starting before opening, because this is where Creator froze (QTCREATORBUG-10733)
startopening = datetime.utcnow() startopening = datetime.utcnow()
openQmakeProject(pathCreator, Targets.DESKTOP_561_DEFAULT) openQmakeProject(pathCreator, [Targets.DESKTOP_561_DEFAULT])
# Wait for parsing to complete # Wait for parsing to complete
startreading = datetime.utcnow() startreading = datetime.utcnow()
waitFor("runButton.enabled", 300000) waitFor("runButton.enabled", 300000)

View File

@@ -0,0 +1,64 @@
############################################################################
#
# Copyright (C) 2017 The Qt Company Ltd.
# Contact: https://www.qt.io/licensing/
#
# This file is part of Qt Creator.
#
# Commercial License Usage
# Licensees holding valid commercial Qt licenses may use this file in
# accordance with the commercial license agreement provided with the
# Software or, alternatively, in accordance with the terms contained in
# a written agreement between you and The Qt Company. For licensing terms
# and conditions see https://www.qt.io/terms-conditions. For further
# information use the contact form at https://www.qt.io/contact-us.
#
# GNU General Public License Usage
# Alternatively, this file may be used under the terms of the GNU
# General Public License version 3 as published by the Free Software
# Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
# included in the packaging of this file. Please review the following
# information to ensure the GNU General Public License requirements will
# be met: https://www.gnu.org/licenses/gpl-3.0.html.
#
############################################################################
source("../../shared/qtcreator.py")
def verifyProjectsMode(expectedKits):
treeView = waitForObject(":Projects.ProjectNavigationTreeView")
bAndRIndex = getQModelIndexStr("text='Build & Run'",
":Projects.ProjectNavigationTreeView")
test.compare(len(dumpItems(treeView.model(), waitForObject(bAndRIndex))),
len(expectedKits), "Verify number of listed kits.")
test.compare(set(dumpItems(treeView.model(), waitForObject(bAndRIndex))),
set(expectedKits), "Verify if expected kits are listed.")
hasKits = len(expectedKits) > 0
test.verify(checkIfObjectExists(":scrollArea.Edit build configuration:_QLabel", hasKits),
"Verify if build settings are being displayed.")
test.verify(checkIfObjectExists(":No valid kits found._QLabel", not hasKits),
"Verify if Creator reports missing kits.")
kitNameTemplate = "Manual.%s"
def __removeKit__(kit, kitName):
global kitNameTemplate
if kitName == Targets.getStringForTarget(Targets.getDefaultKit()):
# The following kits will be the default kit at that time
kitNameTemplate += " (default)"
item = kitNameTemplate % kitName
waitForObjectItem(":BuildAndRun_QTreeView", item)
clickItem(":BuildAndRun_QTreeView", item, 5, 5, 0, Qt.LeftButton)
clickButton(waitForObject(":Remove_QPushButton"))
def main():
startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError():
return
createProject_Qt_Console(tempDir(), "SquishProject")
switchViewTo(ViewConstants.PROJECTS)
verifyProjectsMode(Targets.getTargetsAsStrings(Targets.availableTargetClasses()))
iterateKits(True, False, __removeKit__)
clickButton(waitForObject(":Options.OK_QPushButton"))
verifyProjectsMode([])
invokeMenuItem("File", "Exit")

View File

@@ -39,7 +39,7 @@ def main():
"Verifying window title contains created session name.") "Verifying window title contains created session name.")
checkWelcomePage(sessionName, True) checkWelcomePage(sessionName, True)
for project in projects: for project in projects:
openQmakeProject(project, Targets.DESKTOP_531_DEFAULT) openQmakeProject(project, [Targets.DESKTOP_531_DEFAULT])
progressBarWait(20000) progressBarWait(20000)
checkNavigator(52, "Verifying whether all projects have been opened.") checkNavigator(52, "Verifying whether all projects have been opened.")
openDocument("animation.Resources.animation\\.qrc./animation.basics.animators\\.qml") openDocument("animation.Resources.animation\\.qrc./animation.basics.animators\\.qml")

View File

@@ -39,7 +39,7 @@ def main():
startApplication("qtcreator" + SettingsPath) startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
openQmakeProject(os.path.join(templateDir, proFile), Targets.DESKTOP_531_DEFAULT) openQmakeProject(os.path.join(templateDir, proFile), [Targets.DESKTOP_531_DEFAULT])
qmlFiles = [treebase + "focus\\.qml", treebase + "Core.ListMenu\\.qml"] qmlFiles = [treebase + "focus\\.qml", treebase + "Core.ListMenu\\.qml"]
checkOutlineFor(qmlFiles) checkOutlineFor(qmlFiles)
testModify() testModify()

View File

@@ -36,10 +36,10 @@ def main():
for qtVersion, controls in available: for qtVersion, controls in available:
if qtVersion == "5.3": if qtVersion == "5.3":
targ = Targets.DESKTOP_531_DEFAULT targ = [Targets.DESKTOP_531_DEFAULT]
quick = "2.3" quick = "2.3"
else: else:
targ = Targets.DESKTOP_541_GCC targ = [Targets.DESKTOP_541_GCC]
quick = "2.4" quick = "2.4"
# using a temporary directory won't mess up a potentially existing # using a temporary directory won't mess up a potentially existing
workingDir = tempDir() workingDir = tempDir()

View File

@@ -29,8 +29,8 @@ def main():
startApplication("qtcreator" + SettingsPath) startApplication("qtcreator" + SettingsPath)
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
for targ, quickVer in [[Targets.DESKTOP_480_DEFAULT, 1], [Targets.DESKTOP_561_DEFAULT, 2], for targ, quickVer in [[[Targets.DESKTOP_480_DEFAULT], 1], [[Targets.DESKTOP_561_DEFAULT], 2],
[Targets.DESKTOP_531_DEFAULT, 2]]: [[Targets.DESKTOP_531_DEFAULT], 2]]:
# using a temporary directory won't mess up a potentially existing # using a temporary directory won't mess up a potentially existing
createNewQmlExtension(tempDir(), targ, quickVer) createNewQmlExtension(tempDir(), targ, quickVer)
# wait for parsing to complete # wait for parsing to complete