Merge remote-tracking branch 'origin/12.0'

Change-Id: I517dc84e975a570edd363253ad444a01799dbc4b
This commit is contained in:
Eike Ziller
2023-11-06 10:51:11 +01:00
7 changed files with 127 additions and 92 deletions

View File

@@ -17319,127 +17319,127 @@ Setzen Sie erst eine gültige ausführbare Datei.</translation>
<name>QtC::CompilerExplorer</name> <name>QtC::CompilerExplorer</name>
<message> <message>
<source>Not found</source> <source>Not found</source>
<translation type="unfinished"></translation> <translation>Nicht gefunden</translation>
</message> </message>
<message> <message>
<source>Reset used libraries</source> <source>Reset used libraries</source>
<translation type="unfinished"></translation> <translation>Benutzte Bibliotheken zurücksetzen</translation>
</message> </message>
<message> <message>
<source>No libraries selected</source> <source>No libraries selected</source>
<translation type="unfinished"></translation> <translation>Keine Bibliotheken ausgewählt</translation>
</message> </message>
<message> <message>
<source>Edit</source> <source>Edit</source>
<translation type="unfinished"></translation> <translation>Bearbeiten</translation>
</message> </message>
<message> <message>
<source>Add Compiler</source> <source>Add Compiler</source>
<translation type="unfinished"></translation> <translation>Compiler hinzufügen</translation>
</message> </message>
<message> <message>
<source>Remove Source</source> <source>Remove Source</source>
<translation type="unfinished"></translation> <translation>Quelle entfernen</translation>
</message> </message>
<message> <message>
<source>Advanced Options</source> <source>Advanced Options</source>
<translation type="unfinished"></translation> <translation>Erweiterte Optionen</translation>
</message> </message>
<message> <message>
<source>Remove Compiler</source> <source>Remove Compiler</source>
<translation type="unfinished"></translation> <translation>Compiler entfernen</translation>
</message> </message>
<message> <message>
<source>Bytes</source> <source>Bytes</source>
<translation type="unfinished">Bytes</translation> <translation>Bytes</translation>
</message> </message>
<message> <message>
<source>Failed to compile: &quot;%1&quot;.</source> <source>Failed to compile: &quot;%1&quot;.</source>
<translation type="unfinished"></translation> <translation>Compilierung fehlgeschlagen: &quot;%1&quot;.</translation>
</message> </message>
<message> <message>
<source>Add Source Code</source> <source>Add Source Code</source>
<translation type="unfinished"></translation> <translation>Quelltext hinzufügen</translation>
</message> </message>
<message> <message>
<source>No source code added yet. Add some using the button below.</source> <source>No source code added yet. Add some using the button below.</source>
<translation type="unfinished"></translation> <translation>Es wurde noch kein Quelltext hinzugefügt. Benutzen Sie die Schaltfläche unten, um einen Code-Editor hinzuzufügen.</translation>
</message> </message>
<message> <message>
<source>Add Source</source> <source>Add Source</source>
<translation type="unfinished"></translation> <translation>Quelle hinzufügen</translation>
</message> </message>
<message> <message>
<source>powered by %1</source> <source>powered by %1</source>
<translation type="unfinished"></translation> <translation>Powered by %1</translation>
</message> </message>
<message> <message>
<source>Compiler Explorer Editor</source> <source>Compiler Explorer Editor</source>
<translation type="unfinished"></translation> <translation>Compiler Explorer-Editor</translation>
</message> </message>
<message> <message>
<source>Open Compiler Explorer</source> <source>Open Compiler Explorer</source>
<translation type="unfinished"></translation> <translation>Compiler Explorer öffnen</translation>
</message> </message>
<message> <message>
<source>Compiler Explorer</source> <source>Compiler Explorer</source>
<translation type="unfinished"></translation> <translation>Compiler Explorer</translation>
</message> </message>
<message> <message>
<source>Language:</source> <source>Language:</source>
<translation type="unfinished">Sprache:</translation> <translation>Sprache:</translation>
</message> </message>
<message> <message>
<source>Compiler:</source> <source>Compiler:</source>
<translation type="unfinished">Compiler:</translation> <translation>Compiler:</translation>
</message> </message>
<message> <message>
<source>Compiler options:</source> <source>Compiler options:</source>
<translation type="unfinished"></translation> <translation>Compiler-Optionen:</translation>
</message> </message>
<message> <message>
<source>Arguments passed to the compiler.</source> <source>Arguments passed to the compiler.</source>
<translation type="unfinished"></translation> <translation>Argumente, die an den Compiler übergeben werden.</translation>
</message> </message>
<message> <message>
<source>Libraries:</source> <source>Libraries:</source>
<translation type="unfinished"></translation> <translation>Bibliotheken:</translation>
</message> </message>
<message> <message>
<source>Execute the code</source> <source>Execute the code</source>
<translation type="unfinished"></translation> <translation>Code ausführen</translation>
</message> </message>
<message> <message>
<source>Compile to binary object</source> <source>Compile to binary object</source>
<translation type="unfinished"></translation> <translation>Zu Binärobjekt compilieren</translation>
</message> </message>
<message> <message>
<source>Intel asm syntax</source> <source>Intel asm syntax</source>
<translation type="unfinished"></translation> <translation>Intel ASM-Syntax</translation>
</message> </message>
<message> <message>
<source>Demangle identifiers</source> <source>Demangle identifiers</source>
<translation type="unfinished"></translation> <translation>Bezeichner entschlüsseln</translation>
</message> </message>
<message> <message>
<source>Failed to fetch libraries: &quot;%1&quot;.</source> <source>Failed to fetch libraries: &quot;%1&quot;.</source>
<translation type="unfinished"></translation> <translation>Abrufen von Bibliotheken fehlgeschlagen: &quot;%1&quot;.</translation>
</message> </message>
<message> <message>
<source>Failed to fetch languages: &quot;%1&quot;.</source> <source>Failed to fetch languages: &quot;%1&quot;.</source>
<translation type="unfinished"></translation> <translation>Abrufen von Sprachen fehlgeschlagen: &quot;%1&quot;.</translation>
</message> </message>
<message> <message>
<source>Failed to fetch compilers: &quot;%1&quot;.</source> <source>Failed to fetch compilers: &quot;%1&quot;.</source>
<translation type="unfinished"></translation> <translation>Abrufen von Compilern fehlgeschlagen: &quot;%1&quot;.</translation>
</message> </message>
<message> <message>
<source>Compiler Explorer URL:</source> <source>Compiler Explorer URL:</source>
<translation type="unfinished"></translation> <translation>Compiler Explorer-URL:</translation>
</message> </message>
<message> <message>
<source>URL of the Compiler Explorer instance to use.</source> <source>URL of the Compiler Explorer instance to use.</source>
<translation type="unfinished"></translation> <translation>URL der zu benutzenden Compiler Explorer-Instanz.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -48945,207 +48945,207 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e
<name>QtC::ScreenRecorder</name> <name>QtC::ScreenRecorder</name>
<message> <message>
<source>Save current, cropped frame as image file.</source> <source>Save current, cropped frame as image file.</source>
<translation type="unfinished"></translation> <translation>Aktuellen, zugeschnittenen Frame als Bilddatei speichern.</translation>
</message> </message>
<message> <message>
<source>Copy current, cropped frame as image to the clipboard.</source> <source>Copy current, cropped frame as image to the clipboard.</source>
<translation type="unfinished"></translation> <translation>Aktuellen, zugeschnittenen Frame als Bild in die Zwischenablage kopieren.</translation>
</message> </message>
<message> <message>
<source>X:</source> <source>X:</source>
<translation type="unfinished"></translation> <translation>X:</translation>
</message> </message>
<message> <message>
<source>Y:</source> <source>Y:</source>
<translation type="unfinished"></translation> <translation>Y:</translation>
</message> </message>
<message> <message>
<source>Width:</source> <source>Width:</source>
<translation type="unfinished">Breite:</translation> <translation>Breite:</translation>
</message> </message>
<message> <message>
<source>Height:</source> <source>Height:</source>
<translation type="unfinished">Höhe:</translation> <translation>Höhe:</translation>
</message> </message>
<message> <message>
<source>Save Current Frame As</source> <source>Save Current Frame As</source>
<translation type="unfinished"></translation> <translation>Aktuellen Frame speichern als</translation>
</message> </message>
<message> <message>
<source>Start:</source> <source>Start:</source>
<translation type="unfinished"></translation> <translation>Anfang:</translation>
</message> </message>
<message> <message>
<source>End:</source> <source>End:</source>
<translation type="unfinished"></translation> <translation>Ende:</translation>
</message> </message>
<message> <message>
<source>Trimming</source> <source>Trimming</source>
<translation type="unfinished"></translation> <translation>Trimmen</translation>
</message> </message>
<message> <message>
<source>Range:</source> <source>Range:</source>
<translation type="unfinished"></translation> <translation>Bereich:</translation>
</message> </message>
<message> <message>
<source>Crop and Trim</source> <source>Crop and Trim</source>
<translation type="unfinished"></translation> <translation>Zuschneiden und trimmen</translation>
</message> </message>
<message> <message>
<source>Crop and Trim...</source> <source>Crop and Trim...</source>
<translation type="unfinished"></translation> <translation>Zuschneiden und trimmen...</translation>
</message> </message>
<message> <message>
<source>Crop to %1x%2px.</source> <source>Crop to %1x%2px.</source>
<translation type="unfinished"></translation> <translation>Auf %1x%2px zuschneiden.</translation>
</message> </message>
<message> <message>
<source>Complete area.</source> <source>Complete area.</source>
<translation type="unfinished"></translation> <translation>Gesamter Bereich.</translation>
</message> </message>
<message> <message>
<source>Frames %1 to %2.</source> <source>Frames %1 to %2.</source>
<translation type="unfinished"></translation> <translation>Frames %1 bis %2.</translation>
</message> </message>
<message> <message>
<source>Complete clip.</source> <source>Complete clip.</source>
<translation type="unfinished"></translation> <translation>Gesamter Clip.</translation>
</message> </message>
<message> <message>
<source>Video</source> <source>Video</source>
<translation type="unfinished"></translation> <translation>Video</translation>
</message> </message>
<message> <message>
<source>Animated image</source> <source>Animated image</source>
<translation type="unfinished"></translation> <translation>Animiertes Bild</translation>
</message> </message>
<message> <message>
<source>Lossy</source> <source>Lossy</source>
<translation type="unfinished"></translation> <translation>Verlustbehaftet</translation>
</message> </message>
<message> <message>
<source>Lossless</source> <source>Lossless</source>
<translation type="unfinished"></translation> <translation>Verlustfrei</translation>
</message> </message>
<message> <message>
<source>Export...</source> <source>Export...</source>
<translation type="unfinished">Exportieren...</translation> <translation>Exportieren...</translation>
</message> </message>
<message> <message>
<source>Save As</source> <source>Save As</source>
<translation type="unfinished">Speichern unter</translation> <translation>Speichern unter</translation>
</message> </message>
<message> <message>
<source>Exporting Screen Recording</source> <source>Exporting Screen Recording</source>
<translation type="unfinished"></translation> <translation>Bildschirmaufnahme exportieren</translation>
</message> </message>
<message> <message>
<source>Width and height are not both divisible by 2. The video export for some of the lossy formats will not work.</source> <source>Width and height are not both divisible by 2. The video export for some of the lossy formats will not work.</source>
<translation type="unfinished"></translation> <translation>Breite und Höhe sind nicht beide durch 2 teilbar. Der Videoexport wird für einige verlustbehaftete Formate nicht funktionieren.</translation>
</message> </message>
<message> <message>
<source>Screen Recording Options</source> <source>Screen Recording Options</source>
<translation type="unfinished"></translation> <translation>Optionen für die Bildschirmaufnahme</translation>
</message> </message>
<message> <message>
<source>Display:</source> <source>Display:</source>
<translation type="unfinished"></translation> <translation>Anzeige:</translation>
</message> </message>
<message> <message>
<source>FPS:</source> <source>FPS:</source>
<translation type="unfinished"></translation> <translation>FPS:</translation>
</message> </message>
<message> <message>
<source>Recorded screen area:</source> <source>Recorded screen area:</source>
<translation type="unfinished"></translation> <translation>Aufgenommener Bildschirmbereich:</translation>
</message> </message>
<message> <message>
<source>Open Mov/qtrle rgb24 File</source> <source>Open Mov/qtrle rgb24 File</source>
<translation type="unfinished"></translation> <translation>Mov/qtrle-rgb24-Datei öffnen</translation>
</message> </message>
<message> <message>
<source>Cannot Open Clip</source> <source>Cannot Open Clip</source>
<translation type="unfinished"></translation> <translation>Clip kann nicht geöffnet werden</translation>
</message> </message>
<message> <message>
<source>FFmpeg cannot open %1.</source> <source>FFmpeg cannot open %1.</source>
<translation type="unfinished"></translation> <translation>FFmpeg kann %1 nicht öffnen.</translation>
</message> </message>
<message> <message>
<source>Clip Not Supported</source> <source>Clip Not Supported</source>
<translation type="unfinished"></translation> <translation>Clip wird nicht unterstützt</translation>
</message> </message>
<message> <message>
<source>Choose a clip with the &quot;qtrle&quot; codec and pixel format &quot;rgb24&quot;.</source> <source>Choose a clip with the &quot;qtrle&quot; codec and pixel format &quot;rgb24&quot;.</source>
<translation type="unfinished"></translation> <translation>Wählen Sie einen Clip mit dem &quot;qtrle&quot;-Codec und dem Pixelformat &quot;rgb24&quot;.</translation>
</message> </message>
<message> <message>
<source>Record Screen</source> <source>Record Screen</source>
<translation type="unfinished"></translation> <translation>Bildschirmaufnahme</translation>
</message> </message>
<message> <message>
<source>Record Screen...</source> <source>Record Screen...</source>
<translation type="unfinished"></translation> <translation>Bildschirmaufnahme...</translation>
</message> </message>
<message> <message>
<source>ffmpeg tool:</source> <source>ffmpeg tool:</source>
<translation type="unfinished"></translation> <translation>ffmpeg-Werkzeug:</translation>
</message> </message>
<message> <message>
<source>ffprobe tool:</source> <source>ffprobe tool:</source>
<translation type="unfinished"></translation> <translation>ffprobe-Werkzeug:</translation>
</message> </message>
<message> <message>
<source>Capture the mouse cursor</source> <source>Capture the mouse cursor</source>
<translation type="unfinished"></translation> <translation>Mauszeiger aufnehmen</translation>
</message> </message>
<message> <message>
<source>Capture the screen mouse clicks</source> <source>Capture the screen mouse clicks</source>
<translation type="unfinished"></translation> <translation>Mausklicks aufnehmen</translation>
</message> </message>
<message> <message>
<source>Capture device/filter:</source> <source>Capture device/filter:</source>
<translation type="unfinished"></translation> <translation>Aufnahmegerät/-filter:</translation>
</message> </message>
<message> <message>
<source>Size limit for intermediate output file</source> <source>Size limit for intermediate output file</source>
<translation type="unfinished"></translation> <translation>Größenbegrenzung für die Zwischenausgabedatei</translation>
</message> </message>
<message> <message>
<source>RAM buffer for real-time frames</source> <source>RAM buffer for real-time frames</source>
<translation type="unfinished"></translation> <translation>RAM-Puffer für Echtzeitframes</translation>
</message> </message>
<message> <message>
<source>Write command line of FFmpeg calls to General Messages</source> <source>Write command line of FFmpeg calls to General Messages</source>
<translation type="unfinished"></translation> <translation>Kommandozeilenaufrufe von FFmpeg in die Allgemeinen Ausgaben schreiben</translation>
</message> </message>
<message> <message>
<source>Export animated images as infinite loop</source> <source>Export animated images as infinite loop</source>
<translation type="unfinished"></translation> <translation>Animierte Bilder als Endlosschleifen exportieren</translation>
</message> </message>
<message> <message>
<source>Recording frame rate:</source> <source>Recording frame rate:</source>
<translation type="unfinished"></translation> <translation>Bildrate für die Aufnahme:</translation>
</message> </message>
<message> <message>
<source>Screen ID:</source> <source>Screen ID:</source>
<translation type="unfinished"></translation> <translation>Bildschirm-ID:</translation>
</message> </message>
<message> <message>
<source>FFmpeg Installation</source> <source>FFmpeg Installation</source>
<translation type="unfinished"></translation> <translation>FFmpeg-Installation</translation>
</message> </message>
<message> <message>
<source>Record Settings</source> <source>Record Settings</source>
<translation type="unfinished"></translation> <translation>Aufnahmeeinstellungen</translation>
</message> </message>
<message> <message>
<source>Export Settings</source> <source>Export Settings</source>
<translation type="unfinished"></translation> <translation>Export-Einstellungen</translation>
</message> </message>
<message> <message>
<source>Screen Recording</source> <source>Screen Recording</source>
<translation type="unfinished"></translation> <translation>Bildschirmaufnahme</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@@ -26,6 +26,7 @@
#include <debugger/analyzer/analyzermanager.h> #include <debugger/analyzer/analyzermanager.h>
#include <projectexplorer/buildmanager.h> #include <projectexplorer/buildmanager.h>
#include <projectexplorer/kitaspects.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/projectexplorericons.h> #include <projectexplorer/projectexplorericons.h>
@@ -42,6 +43,7 @@
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
using namespace CppEditor;
using namespace ProjectExplorer; using namespace ProjectExplorer;
using namespace Utils; using namespace Utils;
@@ -402,7 +404,6 @@ void CMakeManager::buildFile(Node *node)
QTC_ASSERT(target, return); QTC_ASSERT(target, return);
const QString generator = CMakeGeneratorKitAspect::generator(target->kit()); const QString generator = CMakeGeneratorKitAspect::generator(target->kit());
const QString relativeSource = filePath.relativeChildPath(targetNode->filePath()).toString(); const QString relativeSource = filePath.relativeChildPath(targetNode->filePath()).toString();
const QString objExtension = Utils::HostOsInfo::isWindowsHost() ? QString(".obj") : QString(".o");
Utils::FilePath targetBase; Utils::FilePath targetBase;
BuildConfiguration *bc = target->activeBuildConfiguration(); BuildConfiguration *bc = target->activeBuildConfiguration();
QTC_ASSERT(bc, return); QTC_ASSERT(bc, return);
@@ -416,8 +417,32 @@ void CMakeManager::buildFile(Node *node)
return; return;
} }
static_cast<CMakeBuildSystem *>(bc->buildSystem()) auto cbc = static_cast<CMakeBuildSystem *>(bc->buildSystem());
->buildCMakeTarget(targetBase.pathAppended(relativeSource).toString() + objExtension); const QString sourceFile = targetBase.pathAppended(relativeSource).toString();
const QString objExtension = [&]() -> QString {
const auto sourceKind = ProjectFile::classify(relativeSource);
const QByteArray cmakeLangExtension = ProjectFile::isCxx(sourceKind)
? "CMAKE_CXX_OUTPUT_EXTENSION"
: "CMAKE_C_OUTPUT_EXTENSION";
const QString extension = cbc->configurationFromCMake().stringValueOf(cmakeLangExtension);
if (!extension.isEmpty())
return extension;
const auto toolchain = ProjectFile::isCxx(sourceKind)
? ToolChainKitAspect::cxxToolChain(target->kit())
: ToolChainKitAspect::cToolChain(target->kit());
using namespace ProjectExplorer::Constants;
static QSet<Id> objIds{
CLANG_CL_TOOLCHAIN_TYPEID,
MSVC_TOOLCHAIN_TYPEID,
MINGW_TOOLCHAIN_TYPEID,
};
if (objIds.contains(toolchain->typeId()))
return ".obj";
return ".o";
}();
cbc->buildCMakeTarget(sourceFile + objExtension);
} }
void CMakeManager::buildFileContextMenu() void CMakeManager::buildFileContextMenu()

View File

@@ -25,6 +25,7 @@ public:
{ {
auto vbox = new QVBoxLayout(this); auto vbox = new QVBoxLayout(this);
vbox->addWidget(m_designerPage->createPage(nullptr)); vbox->addWidget(m_designerPage->createPage(nullptr));
vbox->setContentsMargins({});
} }
void apply() { m_designerPage->apply(); } void apply() { m_designerPage->apply(); }

View File

@@ -472,7 +472,7 @@ void TerminalWidget::linkActivated(const Link &link)
FilePath filePath = FilePath::fromUserInput(link.text); FilePath filePath = FilePath::fromUserInput(link.text);
if (filePath.scheme().toString().startsWith("http")) { if (filePath.scheme().toString().startsWith("http")) {
QDesktopServices::openUrl(filePath.toUrl()); QDesktopServices::openUrl(QUrl::fromUserInput(link.text));
return; return;
} }

View File

@@ -16,6 +16,12 @@ if (QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP)
endif() endif()
option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF) option(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP "Skip Qt Creator's package manager auto-setup" OFF)
# Store the C/C++ object output extension
if (CMAKE_VERSION GREATER_EQUAL "3.19")
cmake_language(DEFER CALL set CMAKE_C_OUTPUT_EXTENSION "${CMAKE_C_OUTPUT_EXTENSION}" CACHE STRING "" FORCE)
cmake_language(DEFER CALL set CMAKE_CXX_OUTPUT_EXTENSION "${CMAKE_CXX_OUTPUT_EXTENSION}" CACHE STRING "" FORCE)
endif()
macro(qtc_auto_setup_compiler_standard toolchainFile) macro(qtc_auto_setup_compiler_standard toolchainFile)
foreach(lang_var C CXX CUDA OBJC OBJCXX) foreach(lang_var C CXX CUDA OBJC OBJCXX)
foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS) foreach(prop_var STANDARD STANDARD_REQUIRED EXTENSIONS)

View File

@@ -245,7 +245,7 @@ int ProcessTestApp::RecursiveBlockingProcess::main()
std::cout << s_leafProcessStarted << std::flush; std::cout << s_leafProcessStarted << std::flush;
while (true) { while (true) {
// TODO: make it configurable so that we could test the reaper timeout // TODO: make it configurable so that we could test the reaper timeout
QThread::msleep(100); QThread::msleep(10);
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
if (s_terminate.load()) { if (s_terminate.load()) {
std::cout << s_leafProcessTerminated << std::flush; std::cout << s_leafProcessTerminated << std::flush;
@@ -260,7 +260,7 @@ int ProcessTestApp::RecursiveBlockingProcess::main()
process.setProcessChannelMode(QProcess::ForwardedChannels); process.setProcessChannelMode(QProcess::ForwardedChannels);
process.start(); process.start();
while (true) { while (true) {
if (process.waitForFinished(1000)) if (process.waitForFinished(10))
return 0; return 0;
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
if (s_terminate.load()) { if (s_terminate.load()) {

View File

@@ -1370,14 +1370,17 @@ void tst_Process::recursiveBlockingProcess()
subConfig.setupSubProcess(&process); subConfig.setupSubProcess(&process);
process.start(); process.start();
QVERIFY(process.waitForStarted(1000)); QVERIFY(process.waitForStarted(1000));
QVERIFY(process.waitForReadyRead(1000)); // The readyRead() is generated from the innermost nested process, so it means
// we need to give enough time for all nested processes to start their
// process launchers successfully.
QVERIFY(process.waitForReadyRead(2000));
QCOMPARE(process.readAllRawStandardOutput(), s_leafProcessStarted); QCOMPARE(process.readAllRawStandardOutput(), s_leafProcessStarted);
QCOMPARE(runningTestProcessCount(), recursionDepth); QCOMPARE(runningTestProcessCount(), recursionDepth);
QVERIFY(!process.waitForFinished(1000)); QVERIFY(!process.waitForFinished(10));
process.terminate(); process.terminate();
QVERIFY(process.waitForReadyRead()); QVERIFY(process.waitForReadyRead(1000));
QCOMPARE(process.readAllRawStandardOutput(), s_leafProcessTerminated); QCOMPARE(process.readAllRawStandardOutput(), s_leafProcessTerminated);
QVERIFY(process.waitForFinished()); QVERIFY(process.waitForFinished(1000));
QCOMPARE(process.exitStatus(), QProcess::NormalExit); QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QCOMPARE(process.exitCode(), s_crashCode); QCOMPARE(process.exitCode(), s_crashCode);
} }