Commit 4b1cda0f authored by Eike Ziller's avatar Eike Ziller
Browse files

Merge remote-tracking branch 'origin/3.5'

Change-Id: I9baaf42531c10c32a2fa78d2504de213e77fdf82
parents 1c822544 c4fe977e
......@@ -29,7 +29,6 @@ indexes += $QDOC_INDEX_DIR/qtwidgets/qtwidgets.index \
$QDOC_INDEX_DIR/qtsensors/qtsensors.index \
$QDOC_INDEX_DIR/qttestlib/qttestlib.index \
$QDOC_INDEX_DIR/qtuitools/qtuitools.index \
$QDOC_INDEX_DIR/qtwebkit/qtwebkit.index \
$QDOC_INDEX_DIR/qtxml/qtxml.index
include(macros.qdocconf)
......
doc/images/qtcreator-qnx-deployment.png

14.5 KB | W: | H:

doc/images/qtcreator-qnx-deployment.png

11.6 KB | W: | H:

doc/images/qtcreator-qnx-deployment.png
doc/images/qtcreator-qnx-deployment.png
doc/images/qtcreator-qnx-deployment.png
doc/images/qtcreator-qnx-deployment.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -121,8 +121,8 @@
\endlist
The Gradle wrappers and scripts are bundled only if you use Gradle, which is
the default. To use Ant instead, deselect the \uicontrol {Use Gradle} check box.
The Gradle wrappers and scripts are bundled only if you use
\l{Selecting the APK Build Tool}{Gradle} to build the application packages.
To view the packages that the \c androiddeployqt tool created, select the
\uicontrol {Open package location after build} check box.
......
......@@ -111,8 +111,7 @@
parameters.
\note Starting a C++ program in the debugger can take a long time, typically
in the range of several seconds to minutes if complex features (like
QtWebKit) are used.
in the range of several seconds to minutes if complex features are used.
\section1 Launching the Debugger in Different Modes
......@@ -217,7 +216,7 @@
The \QC installation program asks you whether you want to register \QC as a
post-mortem debugger. To change the setting, select
\uicontrol Tools > \uicontrol Options > \uicontrol Debugger >
\uicontrol General > \uicontrol {Use QtCreator for post-mortem debugging}.
\uicontrol General > \uicontrol {Use Qt Creator for post-mortem debugging}.
You can launch the debugger in the post-mortem mode if an application
crashes on Windows. Click the \uicontrol {Debug in \QC} button in the error
......
......@@ -96,35 +96,30 @@
\list 1
\li To build the Clang code model plugin, you must acquire Clang and
LLVM in one of the following ways:
\li Acquire Clang 3.6.0 or higher in one of the following ways:
\list
\li Build optimized versions of LLVM and Clang, as instructed in
\l{http://clang.llvm.org/get_started.html}
{Getting Started: Building and Running Clang}.
The instructions describe how to build debug versions. To
build optimized versions, enter the following command
instead of just \c make:
\li Use the package manager of your system.
\c{make ENABLE_OPTIMIZED=1}
\li Download and install LLVM from the
\l{http://llvm.org/releases/}{LLVM Download Page} or
\l{http://llvm.org/builds/}{LLVM Snapshot Builds}.
For information about Git mirrors, see
\l{http://llvm.org/docs/GettingStarted.html#git-mirror}
{Git Mirror}.
\li Build Clang by following
\l{http://clang.llvm.org/get_started.html}
{Getting Started: Building and Running Clang}.
Install the built versions by entering the following
command:
Add the following options to the \c cmake call in order to
build an optimized version and to specify the installation
directory:
\c{make install}
\c -DCMAKE_BUILD_TYPE=Release
\c -DCMAKE_INSTALL_PREFIX=/your/install/dir
\li Download and install LLVM from the
\l{http://llvm.org/releases/}{LLVM Download Page} or
\l{http://llvm.org/builds/}{LLVM Snapshot Builds}.
After building, install with
\li Use the package manager of your system.
\c {make install}
\endlist
......@@ -132,26 +127,7 @@
of LLVM either as part of the build environment or pass it directly
to qmake when you build \QC.
The following are examples of the LLVM_INSTALL_DIR values to use
depending on the installation method:
\list
\li Installed via package manager on Linux:
\c {LLVM_INSTALL_DIR=/usr/lib/llvm-3.6}
\li Manually built on Unix in release mode:
\c {LLVM_INSTALL_DIR=$HOME/llvm-build/Release+Asserts}
\li Installed from a snapshot on Windows:
\c {LLVM_INSTALL_DIR=C:\llvm}
\endlist
\li Rebuild \QC.
\li Rerun \c qmake and build \QC.
\endlist
......
......@@ -177,14 +177,13 @@
\QC validates instances of JSON entities against
\l{http://tools.ietf.org/html/draft-zyp-json-schema-03}
{A JSON Media Type for Describing the Structure and Meaning of JSON Documents}.
However, this feature is still under development, and \QC does not yet
understand the entire specification.
However, \QC does not understand the entire specification.
A JSON schema defines the structure of JSON data. It determines what JSON
data is required for an application and how to interact with it.
The specification does not define how to map JSON instances with JSON
schemas. As a temporary solution, \QC looks for a JSON schema file with a
schemas. \QC looks for a JSON schema file with a
name that matches the name of the JSON instance file in the user
configuration folder. For example, \c {~/config/QtProject/qtcreator/json} on
Linux and OS X and
......@@ -203,8 +202,7 @@
\section1 List of JavaScript and QML Checks
Many of the JavaScript checks are similar to the ones in Douglas Crockford's
JSLint tool and are explained well on
\l{http://www.jslint.com/lint.html}{the JSLint website}.
\l{http://www.jslint.com}{JSLint} tool.
\table
\header
......@@ -1053,13 +1051,14 @@
For example, you might ask colleagues to review a change that you plan to
submit to a version control system. If you use the Git version control
system, you can create a \e{diff} view by selecting \uicontrol Tools >
\uicontrol Git > \uicontrol {Diff Repository}. You can then upload its
contents to the server by choosing \uicontrol Tools >
\uicontrol Git > \uicontrol {Local Repository} > \uicontrol Diff. You can
then upload its contents to the server by selecting \uicontrol Tools >
\uicontrol {Code Pasting} > \uicontrol {Paste Snippet}. The reviewers can
retrieve the code snippet by selecting \uicontrol Tools >
\uicontrol {Code Pasting} > \uicontrol {Fetch Snippet}. If they have the
project currently opened in \QC, they can apply and test the change by
choosing \uicontrol Tools > \uicontrol Git > \uicontrol {Apply Patch}.
choosing \uicontrol Tools > \uicontrol Git > \uicontrol {Patch} >
\uicontrol {Apply from Editor}.
*/
......
......@@ -117,11 +117,8 @@
\endlist
\li Select \uicontrol Run to specify run settings.
\image qtcreator-run-settings-linux-devices.png "Run settings for embedded Linux devices"
Usually, you can use the default settings.
\li Select \uicontrol Run to specify run settings. Usually, you can use
the default settings.
When you run the project, \QC deploys the application as specified by the
deploy steps. By default, \QC copies the application files to the device.
......
Qt Creator custom wizards are located in this directory.
The subdirectories 'helloworld', 'listmodel' and 'scriptgeneratedproject'
are provided as examples.
To see how they work in Qt Creator, rename the 'wizard_sample.xml' files
to 'wizard.xml'.
The command line option -customwizard-verbose can be used to obtain
verbose information while loading the custom wizards.
......@@ -53,7 +53,7 @@ public:
void remove(QObject *component);
template <typename T> T *component() {
QReadLocker(&lock());
QReadLocker locker(&lock());
foreach (QObject *component, m_components) {
if (T *result = qobject_cast<T *>(component))
return result;
......@@ -62,7 +62,7 @@ public:
}
template <typename T> QList<T *> components() {
QReadLocker(&lock());
QReadLocker locker(&lock());
QList<T *> results;
foreach (QObject *component, m_components) {
if (T *result = qobject_cast<T *>(component)) {
......@@ -101,7 +101,7 @@ template <typename T> T *query(QObject *obj)
return (T *)0;
T *result = qobject_cast<T *>(obj);
if (!result) {
QReadLocker(&lock());
QReadLocker locker(&Aggregate::lock());
Aggregate *parentAggregation = Aggregate::parentAggregate(obj);
result = (parentAggregation ? query<T>(parentAggregation) : 0);
}
......@@ -120,7 +120,7 @@ template <typename T> QList<T *> query_all(QObject *obj)
{
if (!obj)
return QList<T *>();
QReadLocker(&lock());
QReadLocker locker(&Aggregate::lock());
Aggregate *parentAggregation = Aggregate::parentAggregate(obj);
QList<T *> results;
if (parentAggregation)
......
......@@ -245,7 +245,7 @@ void IpcCommunicator::initializeBackend()
qCDebug(log) << "Starting" << clangBackEndProcessPath;
QTC_ASSERT(QFileInfo(clangBackEndProcessPath).exists(), return);
m_connection.setProcessAliveTimerInterval(10 * 1000);
m_connection.setProcessAliveTimerInterval(30 * 1000);
m_connection.setProcessPath(clangBackEndProcessPath);
connect(&m_connection, &ConnectionClient::processRestarted,
......
......@@ -134,10 +134,12 @@ static void appendDiagnostic(const CXDiagnostic &diag,
static bool isBlackListedDiagnostic(const Utils::MimeType &mimeType, const QString &diagnostic)
{
static QString pragmaOnceInMainFile = QLatin1String("#pragma once in main file");
static const QStringList blackList {
QLatin1String("#pragma once in main file"),
QLatin1String("#include_next in primary source file")
};
return diagnostic == pragmaOnceInMainFile
&& mimeType.inherits(QLatin1String("text/x-chdr"));
return mimeType.inherits(QLatin1String("text/x-chdr")) && blackList.contains(diagnostic);
}
QList<Diagnostic> SemanticMarker::diagnostics() const
......
......@@ -107,18 +107,6 @@ public:
| TextEditorActionHandler::FollowSymbolUnderCursor);
addHoverHandler(new CppHoverHandler);
if (!HostOsInfo::isMacHost() && !HostOsInfo::isWindowsHost()) {
FileIconProvider::registerIconOverlayForMimeType(
QIcon(creatorTheme()->imageFile(Theme::IconOverlayCppSource, QLatin1String(":/cppeditor/images/qt_cpp.png"))),
Constants::CPP_SOURCE_MIMETYPE);
FileIconProvider::registerIconOverlayForMimeType(
QIcon(creatorTheme()->imageFile(Theme::IconOverlayCSource, QLatin1String(":/cppeditor/images/qt_c.png"))),
Constants::C_SOURCE_MIMETYPE);
FileIconProvider::registerIconOverlayForMimeType(
QIcon(creatorTheme()->imageFile(Theme::IconOverlayCppHeader, QLatin1String(":/cppeditor/images/qt_h.png"))),
Constants::CPP_HEADER_MIMETYPE);
}
}
};
......@@ -280,6 +268,17 @@ bool CppEditorPlugin::initialize(const QStringList & /*arguments*/, QString *err
void CppEditorPlugin::extensionsInitialized()
{
if (!HostOsInfo::isMacHost() && !HostOsInfo::isWindowsHost()) {
FileIconProvider::registerIconOverlayForMimeType(
QIcon(creatorTheme()->imageFile(Theme::IconOverlayCppSource, QLatin1String(":/cppeditor/images/qt_cpp.png"))),
Constants::CPP_SOURCE_MIMETYPE);
FileIconProvider::registerIconOverlayForMimeType(
QIcon(creatorTheme()->imageFile(Theme::IconOverlayCSource, QLatin1String(":/cppeditor/images/qt_c.png"))),
Constants::C_SOURCE_MIMETYPE);
FileIconProvider::registerIconOverlayForMimeType(
QIcon(creatorTheme()->imageFile(Theme::IconOverlayCppHeader, QLatin1String(":/cppeditor/images/qt_h.png"))),
Constants::CPP_HEADER_MIMETYPE);
}
}
ExtensionSystem::IPlugin::ShutdownFlag CppEditorPlugin::aboutToShutdown()
......
......@@ -186,7 +186,7 @@ QStringList BaseController::addConfigurationArguments(const QStringList &args) c
QStringList realArgs;
realArgs << args.at(0);
realArgs << QLatin1String("-m"); // show diff agains parents instead of merge commits
realArgs << QLatin1String("-m"); // show diff against parents instead of merge commits
realArgs << QLatin1String("-M") << QLatin1String("-C"); // Detect renames and copies
realArgs << QLatin1String("--first-parent"); // show only first parent
if (ignoreWhitespace())
......
......@@ -2532,7 +2532,7 @@ void TextEditorWidget::doSetTextCursor(const QTextCursor &cursor)
void TextEditorWidget::gotoLine(int line, int column, bool centerLine)
{
d->m_lastCursorChangeWasInteresting = false; // avoid adding the previous position to history
const int blockNumber = line - 1;
const int blockNumber = qMin(line, document()->blockCount()) - 1;
const QTextBlock &block = document()->findBlockByNumber(blockNumber);
if (block.isValid()) {
QTextCursor cursor(block);
......
Subproject commit 2867e2712e4c03308e4be76821d788c06bac565e
Subproject commit bca958c3f55ca73b7cc9cf09317b192a2dec1bc5
......@@ -896,6 +896,8 @@ void IosTool::stopRelayServers(int errorCode)
int main(int argc, char *argv[])
{
//This keeps iostool from stealing focus
qputenv("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM", "true");
// We do not pass the real arguments to QCoreApplication because this wrapper needs to be able
// to forward arguments like -qmljsdebugger=... that are filtered by QCoreApplication
QStringList args;
......
......@@ -61,25 +61,25 @@ def main():
type(editorWidget, "<Meta+Space>")
else:
type(editorWidget, "<Ctrl+Space>")
type(waitForObject(":popupFrame_Proposal_QListView"), "<Down>")
if current == "Clang":
# different order with Clang code model
type(waitForObject(":popupFrame_Proposal_QListView"), "<Down>")
listView = waitForObject(":popupFrame_Proposal_QListView")
test.compare("class derived from QObject", str(listView.model().data(listView.currentIndex())),
"Verifying selecting the correct entry.")
type(waitForObject(":popupFrame_Proposal_QListView"), "<Return>")
test.verify(str(editorWidget.plainText).startswith("class name : public QObject"),
"Steps 3&4: Verifying if: The list of suggestions is opened. It is "
"possible to select one of the suggestions. Code with several "
"variables is inserted.")
shownProposals = dumpItems(listView.model())
usedProposal = "class derived from QObject"
expectedProposals = ["class", "class ", "class template",
usedProposal, "class derived from QWidget"]
test.compare(len(shownProposals), len(expectedProposals), "Number of proposed templates")
test.compare(set(shownProposals), set(expectedProposals),
"Expected proposals shown, ignoring order?")
doubleClickItem(listView, usedProposal, 5, 5, 0, Qt.LeftButton)
pattern = ("(?<=class)\s+name\s*:\s*public\s+QObject\s*\{\s*Q_OBJECT\s+"
"public:\s+name\(\)\s*\{\}\s+virtual\s+~name\(\)\s*\{\}\s+\};")
test.verify(re.search(pattern, str(editorWidget.plainText)),
"Code with several variables is inserted?")
# Step 5: Press Tab to move between the variables and specify values for them. For example write "Myname" for variable "name".
type(editorWidget, "<Tab>")
type(editorWidget, "<Tab>")
type(editorWidget, "<Tab>")
type(editorWidget, "Myname")
pattern = "(?<=class)\s+Myname\s*:\s*public\s+QObject\s*\{\s*Q_OBJECT\s+public:\s+Myname\(\)\s*\{\}\s+virtual\s+~Myname\(\)\s*\{\}\s+\};"
result = re.search(pattern, str(editorWidget.plainText))
result = re.search(pattern.replace("name", "Myname"), str(editorWidget.plainText))
if result:
test.passes("Step 5: Verifying if: A value for a variable is inserted and all "
"instances of the variable within the snippet are renamed.")
......
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