diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qml/main.cpp | 79 | ||||
-rw-r--r-- | tools/qmlcachegen/generateloader.cpp | 20 | ||||
-rw-r--r-- | tools/qmlcachegen/qmlcachegen.cpp | 18 | ||||
-rw-r--r-- | tools/qmlcachegen/qtquickcompiler.prf | 23 | ||||
-rw-r--r-- | tools/qmleasing/mainwindow.cpp | 2 | ||||
-rw-r--r-- | tools/qmleasing/segmentproperties.cpp | 2 | ||||
-rw-r--r-- | tools/qmleasing/splineeditor.cpp | 2 | ||||
-rw-r--r-- | tools/qmlimportscanner/main.cpp | 21 | ||||
-rw-r--r-- | tools/qmlplugindump/main.cpp | 7 | ||||
-rw-r--r-- | tools/qmlpreview/qmlpreviewapplication.cpp | 28 | ||||
-rw-r--r-- | tools/qmlpreview/qmlpreviewapplication.h | 4 | ||||
-rw-r--r-- | tools/qmlprofiler/qmlprofilerapplication.cpp | 62 | ||||
-rw-r--r-- | tools/qmlprofiler/qmlprofilerapplication.h | 4 | ||||
-rw-r--r-- | tools/qmlscene/main.cpp | 4 | ||||
-rw-r--r-- | tools/tools.pro | 10 |
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 a1a162cda7..867267c821 100644 --- a/tools/qmlscene/main.cpp +++ b/tools/qmlscene/main.cpp @@ -54,8 +54,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 |