aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/qml/main.cpp79
-rw-r--r--tools/qmlcachegen/generateloader.cpp20
-rw-r--r--tools/qmlcachegen/qmlcachegen.cpp18
-rw-r--r--tools/qmlcachegen/qtquickcompiler.prf23
-rw-r--r--tools/qmleasing/mainwindow.cpp2
-rw-r--r--tools/qmleasing/segmentproperties.cpp2
-rw-r--r--tools/qmleasing/splineeditor.cpp2
-rw-r--r--tools/qmlimportscanner/main.cpp21
-rw-r--r--tools/qmlplugindump/main.cpp7
-rw-r--r--tools/qmlpreview/qmlpreviewapplication.cpp28
-rw-r--r--tools/qmlpreview/qmlpreviewapplication.h4
-rw-r--r--tools/qmlprofiler/qmlprofilerapplication.cpp62
-rw-r--r--tools/qmlprofiler/qmlprofilerapplication.h4
-rw-r--r--tools/qmlscene/main.cpp4
-rw-r--r--tools/tools.pro10
15 files changed, 157 insertions, 129 deletions
diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp
index 7dfae2b53d..166c6aabdf 100644
--- a/tools/qml/main.cpp
+++ b/tools/qml/main.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2016 Research In Motion.
+** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the tools applications of the Qt Toolkit.
@@ -164,54 +165,41 @@ class LoadWatcher : public QObject
public:
LoadWatcher(QQmlApplicationEngine *e, int expected)
: QObject(e)
- , earlyExit(false)
- , returnCode(0)
- , expect(expected)
- , haveOne(false)
+ , expectedFileCount(expected)
{
- connect(e, SIGNAL(objectCreated(QObject*,QUrl)),
- this, SLOT(checkFinished(QObject*)));
+ connect(e, &QQmlApplicationEngine::objectCreated, this, &LoadWatcher::checkFinished);
// QQmlApplicationEngine also connects quit() to QCoreApplication::quit
// and exit() to QCoreApplication::exit but if called before exec()
// then QCoreApplication::quit or QCoreApplication::exit does nothing
- connect(e, SIGNAL(quit()),
- this, SLOT(quit()));
- connect(e, &QQmlEngine::exit,
- this, &LoadWatcher::exit);
+ connect(e, &QQmlEngine::quit, this, &LoadWatcher::quit);
+ connect(e, &QQmlEngine::exit, this, &LoadWatcher::exit);
}
- bool earlyExit;
- int returnCode;
-
-private:
- void contain(QObject *o, const QUrl &containPath);
- void checkForWindow(QObject *o);
-
- int expect;
- bool haveOne;
+ bool earlyExit = false;
+ int returnCode = 0;
public Q_SLOTS:
- void checkFinished(QObject *o)
+ void checkFinished(QObject *o, const QUrl &url)
{
+ Q_UNUSED(url)
if (o) {
checkForWindow(o);
- haveOne = true;
if (conf && qae)
for (PartialScene *ps : qAsConst(conf->completers))
if (o->inherits(ps->itemType().toUtf8().constData()))
contain(o, ps->container());
}
- if (haveOne)
+ if (haveWindow)
return;
- if (! --expect) {
+ if (! --expectedFileCount) {
printf("qml: Did not load any objects, exiting.\n");
- std::exit(2);//Different return code from qFatal
+ std::exit(2); // Different return code from qFatal
}
}
void quit() {
- //Will be checked before calling exec()
+ // Will be checked before calling exec()
earlyExit = true;
returnCode = 0;
}
@@ -223,6 +211,14 @@ public Q_SLOTS:
#if defined(QT_GUI_LIB) && QT_CONFIG(opengl)
void onOpenGlContextCreated(QOpenGLContext *context);
#endif
+
+private:
+ void contain(QObject *o, const QUrl &containPath);
+ void checkForWindow(QObject *o);
+
+private:
+ int expectedFileCount;
+ bool haveWindow = false;
};
void LoadWatcher::contain(QObject *o, const QUrl &containPath)
@@ -237,15 +233,17 @@ void LoadWatcher::contain(QObject *o, const QUrl &containPath)
if ((idx = o2->metaObject()->indexOfProperty("containedObject")) != -1)
success = o2->metaObject()->property(idx).write(o2, QVariant::fromValue<QObject*>(o));
if (!success)
- o->setParent(o2); //Set QObject parent, and assume container will react as needed
+ o->setParent(o2); // Set QObject parent, and assume container will react as needed
}
void LoadWatcher::checkForWindow(QObject *o)
{
#if defined(QT_GUI_LIB) && QT_CONFIG(opengl)
- if (verboseMode && o->isWindowType() && o->inherits("QQuickWindow")) {
- connect(o, SIGNAL(openglContextCreated(QOpenGLContext*)),
- this, SLOT(onOpenGlContextCreated(QOpenGLContext*)));
+ if (o->isWindowType() && o->inherits("QQuickWindow")) {
+ haveWindow = true;
+ if (verboseMode)
+ connect(o, SIGNAL(openglContextCreated(QOpenGLContext*)),
+ this, SLOT(onOpenGlContextCreated(QOpenGLContext*)));
}
#else
Q_UNUSED(o)
@@ -274,7 +272,7 @@ void quietMessageHandler(QtMsgType type, const QMessageLogContext &ctxt, const Q
{
Q_UNUSED(ctxt);
Q_UNUSED(msg);
- //Doesn't print anything
+ // Doesn't print anything
switch (type) {
case QtFatalMsg:
exit(-1);
@@ -361,7 +359,7 @@ void noFilesGiven()
exit(1);
}
-//Called before application initialization, removes arguments it uses
+// Called before application initialization, removes arguments it uses
void getAppFlags(int &argc, char **argv)
{
#ifdef QT_GUI_LIB
@@ -471,7 +469,7 @@ int main(int argc, char *argv[])
QString translationFile;
QString dummyDir;
- //Handle main arguments
+ // Handle main arguments
const QStringList argList = app->arguments();
for (int i = 1; i < argList.count(); i++) {
const QString &arg = argList[i];
@@ -493,27 +491,27 @@ int main(int argc, char *argv[])
#endif
else if (arg == QLatin1String("-I")) {
if (i+1 == argList.count())
- continue;//Invalid usage, but just ignore it
+ continue; // Invalid usage, but just ignore it
e.addImportPath(argList[i+1]);
i++;
} else if (arg == QLatin1String("-f")) {
if (i+1 == argList.count())
- continue;//Invalid usage, but just ignore it
+ continue; // Invalid usage, but just ignore it
files << argList[i+1];
i++;
} else if (arg == QLatin1String("-config")){
if (i+1 == argList.count())
- continue;//Invalid usage, but just ignore it
+ continue; // Invalid usage, but just ignore it
confFile = argList[i+1];
i++;
} else if (arg == QLatin1String("-translation")){
if (i+1 == argList.count())
- continue;//Invalid usage, but just ignore it
+ continue; // Invalid usage, but just ignore it
translationFile = argList[i+1];
i++;
} else if (arg == QLatin1String("-dummy-data")){
if (i+1 == argList.count())
- continue;//Invalid usage, but just ignore it
+ continue; // Invalid usage, but just ignore it
dummyDir = argList[i+1];
i++;
} else if (arg == QLatin1String("-gles")) {
@@ -569,7 +567,7 @@ int main(int argc, char *argv[])
qae = &e;
loadConf(confFile, !verboseMode);
- //Load files
+ // Load files
QScopedPointer<LoadWatcher> lw(new LoadWatcher(&e, files.count()));
// Load dummy data before loading QML-files
@@ -582,8 +580,9 @@ int main(int argc, char *argv[])
printf("qml: loading %s\n", qPrintable(url.toString()));
QByteArray strippedFile;
if (getFileSansBangLine(path, strippedFile))
- e.loadData(strippedFile, e.baseUrl().resolved(url)); //QQmlComponent won't resolve it for us, it doesn't know it's a valid file if we loadData
- else //Errors or no bang line
+ // QQmlComponent won't resolve it for us: it doesn't know it's a valid file if we loadData
+ e.loadData(strippedFile, e.baseUrl().resolved(url));
+ else // Errors or no bang line
e.load(url);
}
diff --git a/tools/qmlcachegen/generateloader.cpp b/tools/qmlcachegen/generateloader.cpp
index 68aacf78ce..5b8fc34455 100644
--- a/tools/qmlcachegen/generateloader.cpp
+++ b/tools/qmlcachegen/generateloader.cpp
@@ -26,6 +26,7 @@
**
****************************************************************************/
#include <QByteArray>
+#include <QRegExp>
#include <QString>
#include <QStringList>
#include <QTextStream>
@@ -35,6 +36,8 @@
#include <QFileInfo>
#include <QSaveFile>
+#include <algorithm>
+
/*!
* \internal
* Mangles \a str to be a unique C++ identifier. Characters that are invalid for C++ identifiers
@@ -260,7 +263,8 @@ private:
}
};
-static QByteArray generateResourceDirectoryTree(QTextStream &code, const QStringList &qrcFiles)
+static QByteArray generateResourceDirectoryTree(QTextStream &code, const QStringList &qrcFiles,
+ const QStringList &sortedRetainedFiles)
{
QByteArray call;
if (qrcFiles.isEmpty())
@@ -269,14 +273,15 @@ static QByteArray generateResourceDirectoryTree(QTextStream &code, const QString
VirtualDirectoryEntry resourceDirs;
resourceDirs.name = QStringLiteral("/");
- foreach (const QString &entry, qrcFiles) {
+ for (const QString &entry : qrcFiles) {
const QStringList segments = entry.split(QLatin1Char('/'), QString::SkipEmptyParts);
VirtualDirectoryEntry *dirEntry = &resourceDirs;
for (int i = 0; i < segments.count() - 1; ++i)
dirEntry = dirEntry->append(segments.at(i));
- dirEntry->appendEmptyFile(segments.last());
+ if (!std::binary_search(sortedRetainedFiles.begin(), sortedRetainedFiles.end(), entry))
+ dirEntry->appendEmptyFile(segments.last());
}
if (resourceDirs.isEmpty())
@@ -327,7 +332,9 @@ static QString qtResourceNameForFile(const QString &fileName)
return name;
}
-bool generateLoader(const QStringList &compiledFiles, const QString &outputFileName, const QStringList &resourceFileMappings, QString *errorString)
+bool generateLoader(const QStringList &compiledFiles, const QStringList &sortedRetainedFiles,
+ const QString &outputFileName, const QStringList &resourceFileMappings,
+ QString *errorString)
{
QByteArray generatedLoaderCode;
@@ -338,13 +345,14 @@ bool generateLoader(const QStringList &compiledFiles, const QString &outputFileN
stream << "#include <QtCore/qurl.h>\n";
stream << "\n";
- QByteArray resourceRegisterCall = generateResourceDirectoryTree(stream, compiledFiles);
+ QByteArray resourceRegisterCall = generateResourceDirectoryTree(stream, compiledFiles,
+ sortedRetainedFiles);
stream << "namespace QmlCacheGeneratedCode {\n";
for (int i = 0; i < compiledFiles.count(); ++i) {
const QString compiledFile = compiledFiles.at(i);
const QString ns = symbolNamespaceForPath(compiledFile);
- stream << "namespace " << symbolNamespaceForPath(compiledFile) << " { \n";
+ stream << "namespace " << ns << " { \n";
stream << " extern const unsigned char qmlData[];\n";
stream << " const QQmlPrivate::CachedQmlUnit unit = {\n";
stream << " reinterpret_cast<const QV4::CompiledData::Unit*>(&qmlData), nullptr, nullptr\n";
diff --git a/tools/qmlcachegen/qmlcachegen.cpp b/tools/qmlcachegen/qmlcachegen.cpp
index b6b80a4461..df7468eaef 100644
--- a/tools/qmlcachegen/qmlcachegen.cpp
+++ b/tools/qmlcachegen/qmlcachegen.cpp
@@ -43,8 +43,12 @@
#include "resourcefilemapper.h"
+#include <algorithm>
+
int filterResourceFile(const QString &input, const QString &output);
-bool generateLoader(const QStringList &compiledFiles, const QString &output, const QStringList &resourceFileMappings, QString *errorString);
+bool generateLoader(const QStringList &compiledFiles, const QStringList &retainedFiles,
+ const QString &output, const QStringList &resourceFileMappings,
+ QString *errorString);
QString symbolNamespaceForPath(const QString &relativePath);
QSet<QString> illegalNames;
@@ -104,7 +108,7 @@ static void annotateListElements(QmlIR::Document *document)
{
QStringList listElementNames;
- foreach (const QV4::CompiledData::Import *import, document->imports) {
+ for (const QV4::CompiledData::Import *import : qAsConst(document->imports)) {
const QString uri = document->stringAt(import->uriIndex);
if (uri != QStringLiteral("QtQml.Models") && uri != QStringLiteral("QtQuick"))
continue;
@@ -121,7 +125,7 @@ static void annotateListElements(QmlIR::Document *document)
if (listElementNames.isEmpty())
return;
- foreach (QmlIR::Object *object, document->objects) {
+ for (QmlIR::Object *object : qAsConst(document->objects)) {
if (!listElementNames.contains(document->stringAt(object->inheritedTypeNameIndex)))
continue;
for (QmlIR::Binding *binding = object->firstBinding(); binding; binding = binding->next) {
@@ -420,6 +424,8 @@ int main(int argc, char **argv)
parser.addOption(resourceFileMappingOption);
QCommandLineOption resourceOption(QStringLiteral("resource"), QCoreApplication::translate("main", "Qt resource file that might later contain one of the compiled files"), QCoreApplication::translate("main", "resource-file-name"));
parser.addOption(resourceOption);
+ QCommandLineOption retainOption(QStringLiteral("retain"), QCoreApplication::translate("main", "Qt resource file the contents of which should not be replaced by empty stubs"), QCoreApplication::translate("main", "resource-file-name"));
+ parser.addOption(retainOption);
QCommandLineOption resourcePathOption(QStringLiteral("resource-path"), QCoreApplication::translate("main", "Qt resource file path corresponding to the file being compiled"), QCoreApplication::translate("main", "resource-path"));
parser.addOption(resourcePathOption);
@@ -467,9 +473,13 @@ int main(int argc, char **argv)
if (target == GenerateLoader) {
ResourceFileMapper mapper(sources);
+ ResourceFileMapper retain(parser.values(retainOption));
Error error;
- if (!generateLoader(mapper.qmlCompilerFiles(), outputFileName, parser.values(resourceFileMappingOption), &error.message)) {
+ QStringList retainedFiles = retain.qmlCompilerFiles();
+ std::sort(retainedFiles.begin(), retainedFiles.end());
+ if (!generateLoader(mapper.qmlCompilerFiles(), retainedFiles, outputFileName,
+ parser.values(resourceFileMappingOption), &error.message)) {
error.augment(QLatin1String("Error generating loader stub: ")).print();
return EXIT_FAILURE;
}
diff --git a/tools/qmlcachegen/qtquickcompiler.prf b/tools/qmlcachegen/qtquickcompiler.prf
index dd526f13a3..9c8c7a7b1e 100644
--- a/tools/qmlcachegen/qtquickcompiler.prf
+++ b/tools/qmlcachegen/qtquickcompiler.prf
@@ -16,6 +16,13 @@ defineReplace(qmlCacheResourceFileOutputName) {
return($${name})
}
+defineTest(qtQuickRetainSources) {
+ for(retainedRes, QTQUICK_COMPILER_RETAINED_RESOURCES) {
+ equals(1, $$retainedRes): return(true)
+ }
+ return(false)
+}
+
defineTest(qtQuickSkippedResourceFile) {
for(skippedRes, QTQUICK_COMPILER_SKIPPED_RESOURCES) {
equals(1, $$skippedRes): return(true)
@@ -40,12 +47,18 @@ for(res, RESOURCES) {
contains(rccContents,.*\\.js$)|contains(rccContents,.*\\.qml$)|contains(rccContents,.*\\.mjs$) {
new_resource = $$qmlCacheResourceFileOutputName($$res)
mkpath($$dirname(new_resource))
- remaining_files = $$system($$QML_CACHEGEN_FILTER -filter-resource-file -o $$system_quote($$new_resource) $$system_quote($$absRes),lines)
- !isEmpty(remaining_files) {
- NEWRESOURCES += $$new_resource
- QMLCACHE_LOADER_FLAGS += --resource-file-mapping=$$shell_quote($$absRes=$$new_resource)
+ qtQuickRetainSources($$res) {
+ NEWRESOURCES += $$res
+ QMLCACHE_LOADER_FLAGS += --retain=$$shell_quote($$absRes)
} else {
- QMLCACHE_LOADER_FLAGS += --resource-file-mapping=$$shell_quote($$absRes)
+ remaining_files = $$system($$QML_CACHEGEN_FILTER -filter-resource-file \
+ -o $$system_quote($$new_resource) $$system_quote($$absRes),lines)
+ !isEmpty(remaining_files) {
+ NEWRESOURCES += $$new_resource
+ QMLCACHE_LOADER_FLAGS += --resource-file-mapping=$$shell_quote($$absRes=$$new_resource)
+ } else {
+ QMLCACHE_LOADER_FLAGS += --resource-file-mapping=$$shell_quote($$absRes)
+ }
}
QMLCACHE_RESOURCE_FILES += $$absRes
diff --git a/tools/qmleasing/mainwindow.cpp b/tools/qmleasing/mainwindow.cpp
index c1a87642a5..679b4c0b91 100644
--- a/tools/qmleasing/mainwindow.cpp
+++ b/tools/qmleasing/mainwindow.cpp
@@ -82,7 +82,7 @@ MainWindow::MainWindow(QWidget *parent) :
splineEditor->setPreset(ui_properties.comboBox->currentText());
QVBoxLayout *groupBoxLayout = new QVBoxLayout(ui_properties.groupBox);
- groupBoxLayout->setMargin(0);
+ groupBoxLayout->setContentsMargins(QMargins());
ui_properties.groupBox->setLayout(groupBoxLayout);
groupBoxLayout->addWidget(splineEditor->pointListWidget());
diff --git a/tools/qmleasing/segmentproperties.cpp b/tools/qmleasing/segmentproperties.cpp
index f37527f863..c61feef9a4 100644
--- a/tools/qmleasing/segmentproperties.cpp
+++ b/tools/qmleasing/segmentproperties.cpp
@@ -33,7 +33,7 @@ SegmentProperties::SegmentProperties(QWidget *parent) :
QWidget(parent), m_splineEditor(nullptr), m_blockSignals(false)
{
QVBoxLayout *layout = new QVBoxLayout(this);
- layout->setMargin(0);
+ layout->setContentsMargins(QMargins());
layout->setSpacing(2);
setLayout(layout);
{
diff --git a/tools/qmleasing/splineeditor.cpp b/tools/qmleasing/splineeditor.cpp
index 2a6081903f..69850dc7a1 100644
--- a/tools/qmleasing/splineeditor.cpp
+++ b/tools/qmleasing/splineeditor.cpp
@@ -524,7 +524,7 @@ void SplineEditor::setupPointListWidget()
m_pointListWidget->setWidget(new QWidget(m_pointListWidget));
QVBoxLayout *layout = new QVBoxLayout(m_pointListWidget->widget());
- layout->setMargin(0);
+ layout->setContentsMargins(QMargins());
layout->setSpacing(2);
m_pointListWidget->widget()->setLayout(layout);
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp
index 60e0f1773f..616de9e80d 100644
--- a/tools/qmlimportscanner/main.cpp
+++ b/tools/qmlimportscanner/main.cpp
@@ -89,13 +89,13 @@ QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, con
{
QVariantList imports;
- // extract uri and version from the imports (which look like "import Foo.Bar 1.2.3")
+ // Extract uri and version from the imports (which look like "import Foo.Bar 1.2.3")
for (QQmlJS::AST::UiHeaderItemList *headerItemIt = headerItemList; headerItemIt; headerItemIt = headerItemIt->next) {
QVariantMap import;
QQmlJS::AST::UiImport *importNode = QQmlJS::AST::cast<QQmlJS::AST::UiImport *>(headerItemIt->headerItem);
if (!importNode)
continue;
- // handle directory imports
+ // Handle directory imports
if (!importNode->fileName.isEmpty()) {
QString name = importNode->fileName.toString();
import[nameLiteral()] = name;
@@ -137,7 +137,7 @@ QVariantMap pluginsForModulePath(const QString &modulePath) {
qmldirFile.open(QIODevice::ReadOnly | QIODevice::Text);
- // a qml import may contain several plugins
+ // A qml import may contain several plugins
QString plugins;
QString classnames;
QStringList dependencies;
@@ -206,7 +206,7 @@ QPair<QString, QString> resolveImportPath(const QString &uri, const QString &ver
}
}
- // remove the last version digit; stop if there are none left
+ // Remove the last version digit; stop if there are none left
if (ver.isEmpty())
break;
@@ -426,7 +426,7 @@ QVariantList findQmlImportsInDirectory(const QString &qmlDir)
if (std::find_if(blacklist.cbegin(), blacklist.cend(), pathStartsWith(path)) != blacklist.cend())
continue;
- // skip obvious build output directories
+ // Skip obvious build output directories
if (path.contains(QLatin1String("Debug-iphoneos")) || path.contains(QLatin1String("Release-iphoneos")) ||
path.contains(QLatin1String("Debug-iphonesimulator")) || path.contains(QLatin1String("Release-iphonesimulator"))
#ifdef Q_OS_WIN
@@ -455,30 +455,29 @@ QSet<QString> importModulePaths(const QVariantList &imports) {
return ret;
}
-// Find Qml Imports Recursively from a root set of qml files.
+// Find qml imports recursively from a root set of qml files.
// The directories in qmlDirs are searched recursively.
// The files in qmlFiles parsed directly.
QVariantList findQmlImportsRecursively(const QStringList &qmlDirs, const QStringList &scanFiles)
{
QVariantList ret;
- // scan all app root qml directories for imports
+ // Scan all app root qml directories for imports
for (const QString &qmlDir : qmlDirs) {
QVariantList imports = findQmlImportsInDirectory(qmlDir);
ret = mergeImports(ret, imports);
}
- // scan app qml files for imports
+ // Scan app qml files for imports
for (const QString &file : scanFiles) {
QVariantList imports = findQmlImportsInFile(file);
ret = mergeImports(ret, imports);
}
-
- // get the paths to theimports found in the app qml
+ // Get the paths to the imports found in the app qml
QSet<QString> toVisit = importModulePaths(ret);
- // recursivly scan for import dependencies.
+ // Recursively scan for import dependencies.
QSet<QString> visited;
while (!toVisit.isEmpty()) {
QString qmlDir = *toVisit.begin();
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp
index 67ffd5a555..f3b931fbbf 100644
--- a/tools/qmlplugindump/main.cpp
+++ b/tools/qmlplugindump/main.cpp
@@ -76,9 +76,9 @@
namespace {
const uint qtQmlMajorVersion = 2;
-const uint qtQmlMinorVersion = QT_VERSION_MINOR;
+const uint qtQmlMinorVersion = 0;
const uint qtQuickMajorVersion = 2;
-const uint qtQuickMinorVersion = QT_VERSION_MINOR;
+const uint qtQuickMinorVersion = 0;
const QString qtQuickQualifiedName = QString::fromLatin1("QtQuick %1.%2")
.arg(qtQuickMajorVersion)
@@ -1136,8 +1136,7 @@ int main(int argc, char *argv[])
QRegularExpressionMatchIterator i = re.globalMatch(merge[1]);
while (i.hasNext()) {
QRegularExpressionMatch m = i.next();
- QString d = m.captured(1);
- mergeDependencies << m.captured(1);
+ mergeDependencies << m.captured(1);
}
mergeComponents = merge [2];
}
diff --git a/tools/qmlpreview/qmlpreviewapplication.cpp b/tools/qmlpreview/qmlpreviewapplication.cpp
index 02f10831ec..17017dae77 100644
--- a/tools/qmlpreview/qmlpreviewapplication.cpp
+++ b/tools/qmlpreview/qmlpreviewapplication.cpp
@@ -104,11 +104,11 @@ void QmlPreviewApplication::parseArguments()
parser.addHelpOption();
parser.addVersionOption();
- parser.addPositionalArgument(QLatin1String("program"),
- tr("The program to be started and previewed."),
- QLatin1String("[program]"));
+ parser.addPositionalArgument(QLatin1String("executable"),
+ tr("The executable to be started and previewed."),
+ QLatin1String("[executable]"));
parser.addPositionalArgument(QLatin1String("parameters"),
- tr("Parameters for the program to be started."),
+ tr("Parameters for the executable to be started."),
QLatin1String("[parameters...]"));
parser.process(*this);
@@ -120,12 +120,12 @@ void QmlPreviewApplication::parseArguments()
if (parser.isSet(verbose))
m_verbose = true;
- m_programArguments = parser.positionalArguments();
- if (!m_programArguments.isEmpty())
- m_programPath = m_programArguments.takeFirst();
+ m_arguments = parser.positionalArguments();
+ if (!m_arguments.isEmpty())
+ m_executablePath = m_arguments.takeFirst();
- if (m_programPath.isEmpty()) {
- logError(tr("You have to specify a program to start."));
+ if (m_executablePath.isEmpty()) {
+ logError(tr("You have to specify an executable to start."));
parser.showHelp(2);
}
}
@@ -143,17 +143,17 @@ void QmlPreviewApplication::run()
m_process.reset(new QProcess(this));
QStringList arguments;
arguments << QString("-qmljsdebugger=file:%1,block,services:QmlPreview").arg(m_socketFile);
- arguments << m_programArguments;
+ arguments << m_arguments;
m_process->setProcessChannelMode(QProcess::MergedChannels);
connect(m_process.data(), &QIODevice::readyRead,
this, &QmlPreviewApplication::processHasOutput);
- connect(m_process.data(), static_cast<void(QProcess::*)(int)>(&QProcess::finished),
+ connect(m_process.data(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, [this](int){ processFinished(); });
- logStatus(QString("Starting '%1 %2' ...").arg(m_programPath, arguments.join(QLatin1Char(' '))));
- m_process->start(m_programPath, arguments);
+ logStatus(QString("Starting '%1 %2' ...").arg(m_executablePath, arguments.join(QLatin1Char(' '))));
+ m_process->start(m_executablePath, arguments);
if (!m_process->waitForStarted()) {
- logError(QString("Could not run '%1': %2").arg(m_programPath, m_process->errorString()));
+ logError(QString("Could not run '%1': %2").arg(m_executablePath, m_process->errorString()));
exit(1);
}
m_connectTimer.start();
diff --git a/tools/qmlpreview/qmlpreviewapplication.h b/tools/qmlpreview/qmlpreviewapplication.h
index 7da4a9ab5c..51a70cbac3 100644
--- a/tools/qmlpreview/qmlpreviewapplication.h
+++ b/tools/qmlpreview/qmlpreviewapplication.h
@@ -63,8 +63,8 @@ private:
bool sendFile(const QString &path);
void sendDirectory(const QString &path);
- QString m_programPath;
- QStringList m_programArguments;
+ QString m_executablePath;
+ QStringList m_arguments;
QScopedPointer<QProcess> m_process;
bool m_verbose;
diff --git a/tools/qmlprofiler/qmlprofilerapplication.cpp b/tools/qmlprofiler/qmlprofilerapplication.cpp
index 6732766b46..f92ffa9ff5 100644
--- a/tools/qmlprofiler/qmlprofilerapplication.cpp
+++ b/tools/qmlprofiler/qmlprofilerapplication.cpp
@@ -29,7 +29,6 @@
#include "qmlprofilerapplication.h"
#include "constants.h"
#include <QtCore/QStringList>
-#include <QtCore/QTextStream>
#include <QtCore/QProcess>
#include <QtCore/QTimer>
#include <QtCore/QDateTime>
@@ -38,6 +37,8 @@
#include <QtCore/QCommandLineParser>
#include <QtCore/QTemporaryFile>
+#include <iostream>
+
static const char commandTextC[] =
"The following commands are available:\n"
"'r', 'record'\n"
@@ -52,8 +53,8 @@ static const char commandTextC[] =
" Stop recording if it is running, then output the\n"
" data, and finally clear it from memory.\n"
"'q', 'quit'\n"
- " Terminate the program if started from qmlprofiler,\n"
- " and qmlprofiler itself.";
+ " Terminate the target process if started from\n"
+ " qmlprofiler, and qmlprofiler itself.";
static const char *features[] = {
"javascript",
@@ -120,10 +121,8 @@ QmlProfilerApplication::~QmlProfilerApplication()
logStatus("Killing process ...");
m_process->kill();
}
- if (isInteractive()) {
- QTextStream err(stderr);
- err << endl;
- }
+ if (isInteractive())
+ std::cerr << std::endl;
delete m_process;
}
@@ -199,11 +198,11 @@ void QmlProfilerApplication::parseArguments()
parser.addHelpOption();
parser.addVersionOption();
- parser.addPositionalArgument(QLatin1String("program"),
- tr("The program to be started and profiled."),
- QLatin1String("[program]"));
+ parser.addPositionalArgument(QLatin1String("executable"),
+ tr("The executable to be started and profiled."),
+ QLatin1String("[executable]"));
parser.addPositionalArgument(QLatin1String("parameters"),
- tr("Parameters for the program to be started."),
+ tr("Parameters for the executable to be started."),
QLatin1String("[parameters...]"));
parser.process(*this);
@@ -252,17 +251,17 @@ void QmlProfilerApplication::parseArguments()
if (parser.isSet(verbose))
m_verbose = true;
- m_programArguments = parser.positionalArguments();
- if (!m_programArguments.isEmpty())
- m_programPath = m_programArguments.takeFirst();
+ m_arguments = parser.positionalArguments();
+ if (!m_arguments.isEmpty())
+ m_executablePath = m_arguments.takeFirst();
- if (m_runMode == LaunchMode && m_programPath.isEmpty()) {
- logError(tr("You have to specify either --attach or a program to start."));
+ if (m_runMode == LaunchMode && m_executablePath.isEmpty()) {
+ logError(tr("You have to specify either --attach or an executable to start."));
parser.showHelp(2);
}
- if (m_runMode == AttachMode && !m_programPath.isEmpty()) {
- logError(tr("--attach cannot be used when starting a program."));
+ if (m_runMode == AttachMode && !m_executablePath.isEmpty()) {
+ logError(tr("--attach cannot be used when starting an executable."));
parser.showHelp(3);
}
}
@@ -469,17 +468,17 @@ void QmlProfilerApplication::run()
arguments << QString::fromLatin1("-qmljsdebugger=%1:%2,block,services:CanvasFrameRate")
.arg(QLatin1String(m_socketFile.isEmpty() ? "port" : "file"))
.arg(m_socketFile.isEmpty() ? QString::number(m_port) : m_socketFile);
- arguments << m_programArguments;
+ arguments << m_arguments;
m_process->setProcessChannelMode(QProcess::MergedChannels);
connect(m_process, &QIODevice::readyRead, this, &QmlProfilerApplication::processHasOutput);
- connect(m_process, static_cast<void(QProcess::*)(int)>(&QProcess::finished),
+ connect(m_process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, [this](int){ processFinished(); });
- logStatus(QString("Starting '%1 %2' ...").arg(m_programPath,
+ logStatus(QString("Starting '%1 %2' ...").arg(m_executablePath,
arguments.join(QLatin1Char(' '))));
- m_process->start(m_programPath, arguments);
+ m_process->start(m_executablePath, arguments);
if (!m_process->waitForStarted()) {
- logError(QString("Could not run '%1': %2").arg(m_programPath,
+ logError(QString("Could not run '%1': %2").arg(m_executablePath,
m_process->errorString()));
exit(1);
}
@@ -539,10 +538,8 @@ void QmlProfilerApplication::disconnected()
void QmlProfilerApplication::processHasOutput()
{
Q_ASSERT(m_process);
- while (m_process->bytesAvailable()) {
- QTextStream out(stderr);
- out << m_process->readAll();
- }
+ while (m_process->bytesAvailable())
+ std::cerr << m_process->readAll().constData();
}
void QmlProfilerApplication::processFinished()
@@ -594,10 +591,9 @@ void QmlProfilerApplication::traceFinished()
void QmlProfilerApplication::prompt(const QString &line, bool ready)
{
if (m_interactive) {
- QTextStream err(stderr);
if (!line.isEmpty())
- err << line << endl;
- err << QLatin1String("> ");
+ std::cerr << qPrintable(line) << std::endl;
+ std::cerr << "> ";
if (ready)
emit readyForCommand();
}
@@ -605,14 +601,12 @@ void QmlProfilerApplication::prompt(const QString &line, bool ready)
void QmlProfilerApplication::logError(const QString &error)
{
- QTextStream err(stderr);
- err << "Error: " << error << endl;
+ std::cerr << "Error: " << qPrintable(error) << std::endl;
}
void QmlProfilerApplication::logStatus(const QString &status)
{
if (!m_verbose)
return;
- QTextStream err(stderr);
- err << status << endl;
+ std::cerr << qPrintable(status) << std::endl;
}
diff --git a/tools/qmlprofiler/qmlprofilerapplication.h b/tools/qmlprofiler/qmlprofilerapplication.h
index 2d00e2b7c5..73b2b231cd 100644
--- a/tools/qmlprofiler/qmlprofilerapplication.h
+++ b/tools/qmlprofiler/qmlprofilerapplication.h
@@ -91,8 +91,8 @@ private:
} m_runMode;
// LaunchMode
- QString m_programPath;
- QStringList m_programArguments;
+ QString m_executablePath;
+ QStringList m_arguments;
QProcess *m_process;
QString m_socketFile;
diff --git a/tools/qmlscene/main.cpp b/tools/qmlscene/main.cpp
index 83d6ce5d72..c6c6ed1c4a 100644
--- a/tools/qmlscene/main.cpp
+++ b/tools/qmlscene/main.cpp
@@ -53,8 +53,8 @@
#include <QtWidgets/QApplication>
#if QT_CONFIG(filedialog)
#include <QtWidgets/QFileDialog>
-#endif
-#endif
+#endif // QT_CONFIG(filedialog)
+#endif // QT_WIDGETS_LIB
#include <QtCore/QTranslator>
#include <QtCore/QLibraryInfo>
diff --git a/tools/tools.pro b/tools/tools.pro
index d3ec380717..73cb6e2293 100644
--- a/tools/tools.pro
+++ b/tools/tools.pro
@@ -10,7 +10,7 @@ qtConfig(qml-devtools) {
qtConfig(commandlineparser):qtConfig(xmlstreamwriter): SUBDIRS += qmlcachegen
}
-qtConfig(thread):!android|android_app {
+qtConfig(thread):!android|android_app:!wasm {
SUBDIRS += \
qml
@@ -28,7 +28,13 @@ qtConfig(thread):!android|android_app {
qmlplugindump
}
}
- qtHaveModule(widgets): SUBDIRS += qmleasing
+ qtHaveModule(widgets) {
+ QT_FOR_CONFIG += widgets
+ qtConfig(dialogbuttonbox) {
+ SUBDIRS += \
+ qmleasing
+ }
+ }
}
qtHaveModule(qmltest): SUBDIRS += qmltestrunner
qtConfig(private_tests): SUBDIRS += qmljs