diff options
Diffstat (limited to 'src/corelib/doc/snippets')
36 files changed, 477 insertions, 106 deletions
diff --git a/src/corelib/doc/snippets/cmake-macros/deployment.cmake b/src/corelib/doc/snippets/cmake-macros/deployment.cmake index 754e3ee759..ef7aa726c0 100644 --- a/src/corelib/doc/snippets/cmake-macros/deployment.cmake +++ b/src/corelib/doc/snippets/cmake-macros/deployment.cmake @@ -1,5 +1,5 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #! [qt_generate_deploy_script_example] cmake_minimum_required(VERSION 3.16...3.22) diff --git a/src/corelib/doc/snippets/cmake-macros/examples.cmake b/src/corelib/doc/snippets/cmake-macros/examples.cmake index 3afaec0fda..09b7470962 100644 --- a/src/corelib/doc/snippets/cmake-macros/examples.cmake +++ b/src/corelib/doc/snippets/cmake-macros/examples.cmake @@ -1,11 +1,37 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#! [qt_wrap_cpp] +#! [qt_wrap_cpp_1] set(SOURCES myapp.cpp main.cpp) qt_wrap_cpp(SOURCES myapp.h) qt_add_executable(myapp ${SOURCES}) -#! [qt_wrap_cpp] +#! [qt_wrap_cpp_1] + +#! [qt_wrap_cpp_2] +set(SOURCES myapp.cpp main.cpp) +qt_wrap_cpp(SOURCES myapp.h + TARGET myapp + OPTIONS + "$<$<CONFIG:Debug>:-DMY_OPTION_FOR_DEBUG>" + "-DDEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)" + "$<$<CONFIG:Debug>:-DDEFINE_CMDLINE_SIGNAL_IN_GENEX=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>") +qt_add_executable(myapp ${SOURCES}) +#! [qt_wrap_cpp_2] + +#! [qt_wrap_cpp_3] +set(SOURCES myapp.cpp main.cpp) +qt_wrap_cpp(SOURCES myapp.h + TARGET myapp) +qt_add_executable(myapp ${SOURCES}) +target_compile_definitions(myapp PRIVATE "$<$<CONFIG:Debug>:MY_OPTION_FOR_DEBUG>" + "DEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)" + "$<$<BOOL:TRUE>:DEFINE_CMDLINE_SIGNAL_IN_GENEX=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>") +#! [qt_wrap_cpp_3] + +#! [qt_wrap_cpp_4] +qt_add_executable(myapp myapp.cpp main.cpp) +qt_wrap_cpp("" myapp.cpp TARGET myapp) +#! [qt_wrap_cpp_4] #! [qt_add_resources] set(SOURCES main.cpp) diff --git a/src/corelib/doc/snippets/cmake-macros/examples.cpp b/src/corelib/doc/snippets/cmake-macros/examples.cpp new file mode 100644 index 0000000000..b17fcd8e77 --- /dev/null +++ b/src/corelib/doc/snippets/cmake-macros/examples.cpp @@ -0,0 +1,16 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +//! [qt_wrap_cpp_4] +// myapp.cpp +#include "myapp.h" +#include <QObject> + +class MyApp : public QObject { + Q_OBJECT +public: + MyApp() = default; +}; + +#include "myapp.moc" +//! [qt_wrap_cpp_4] diff --git a/src/corelib/doc/snippets/code/doc_src_containers.cpp b/src/corelib/doc/snippets/code/doc_src_containers.cpp index 5bcee95d32..b568462492 100644 --- a/src/corelib/doc/snippets/code/doc_src_containers.cpp +++ b/src/corelib/doc/snippets/code/doc_src_containers.cpp @@ -1,6 +1,8 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + //! [0] class Employee { diff --git a/src/corelib/doc/snippets/code/doc_src_properties.cpp b/src/corelib/doc/snippets/code/doc_src_properties.cpp index bb369e6456..190a843710 100644 --- a/src/corelib/doc/snippets/code/doc_src_properties.cpp +++ b/src/corelib/doc/snippets/code/doc_src_properties.cpp @@ -68,6 +68,9 @@ public: void setPriority(Priority priority) { + if (m_priority == priority) + return; + m_priority = priority; emit priorityChanged(priority); } @@ -93,7 +96,7 @@ object->setProperty("priority", "VeryHigh"); //! [7] -Q_CLASSINFO("Version", "3.0.0") +Q_CLASSINFO("DefaultProperty", "content") //! [7] //! [8] diff --git a/src/corelib/doc/snippets/code/doc_src_qalgorithms.cpp b/src/corelib/doc/snippets/code/doc_src_qalgorithms.cpp index 201517aa2a..f2b94a7416 100644 --- a/src/corelib/doc/snippets/code/doc_src_qalgorithms.cpp +++ b/src/corelib/doc/snippets/code/doc_src_qalgorithms.cpp @@ -1,15 +1,6 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -//! [0] -double pi = 3.14; -double e = 2.71; - -qSwap(pi, e); -// pi == 2.71, e == 3.14 -//! [0] - - //! [1] QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); diff --git a/src/corelib/doc/snippets/code/doc_src_qnamespace.qdoc b/src/corelib/doc/snippets/code/doc_src_qnamespace.qdoc index 41fc57df40..6ce29308f1 100644 --- a/src/corelib/doc/snippets/code/doc_src_qnamespace.qdoc +++ b/src/corelib/doc/snippets/code/doc_src_qnamespace.qdoc @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only //! [0] QObject::connect: Cannot queue arguments of type 'MyType' diff --git a/src/corelib/doc/snippets/code/doc_src_resources.qdoc b/src/corelib/doc/snippets/code/doc_src_resources.qdoc index f5a12ee86a..70c2a7b7ab 100644 --- a/src/corelib/doc/snippets/code/doc_src_resources.qdoc +++ b/src/corelib/doc/snippets/code/doc_src_resources.qdoc @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only //! [0] <file alias="cut-img.png">images/cut.png</file> diff --git a/src/corelib/doc/snippets/code/qlogging/qlogging.cpp b/src/corelib/doc/snippets/code/qlogging/qlogging.cpp index d1c3c7b00d..e61eb70df3 100644 --- a/src/corelib/doc/snippets/code/qlogging/qlogging.cpp +++ b/src/corelib/doc/snippets/code/qlogging/qlogging.cpp @@ -1,14 +1,16 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + #include <QtGui> #include <QtDebug> -#include <QDeclarativeComponent> +#include <QQmlComponent> //! [1] - void statusChanged(QDeclarativeComponent::Status status) { - if (status == QDeclarativeComponent::Error) { - foreach (const QDeclarativeError &error, component->errors()) { + void statusChanged(QQmlComponent::Status status) { + if (status == QQmlComponent::Error) { + for (const QQmlError &error: std::as_const(component->errors())) { const QByteArray file = error.url().toEncoded(); QMessageLogger(file.constData(), error.line(), 0).debug() << error.description(); } diff --git a/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp b/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp index 70698cd7e0..25d3abf67e 100644 --- a/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp @@ -210,37 +210,26 @@ const TInputType &myMin(const TInputType &value1, const TInputType &value2) //! [23] -#include <qapplication.h> +#include <QApplication> #include <stdio.h> #include <stdlib.h> -void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg) +QtMessageHandler originalHandler = nullptr; + +void logToFile(QtMsgType type, const QMessageLogContext &context, const QString &msg) { - QByteArray localMsg = msg.toLocal8Bit(); - const char *file = context.file ? context.file : ""; - const char *function = context.function ? context.function : ""; - switch (type) { - case QtDebugMsg: - fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); - break; - case QtInfoMsg: - fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); - break; - case QtWarningMsg: - fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); - break; - case QtCriticalMsg: - fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); - break; - case QtFatalMsg: - fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function); - break; - } + QString message = qFormatLogMessage(type, context, msg); + static FILE *f = fopen("log.txt", "a"); + fprintf(f, "%s\n", qPrintable(message)); + fflush(f); + + if (originalHandler) + *originalHandler(type, context, msg); } int main(int argc, char **argv) { - qInstallMessageHandler(myMessageOutput); + originalHandler = qInstallMessageHandler(logToFile); QApplication app(argc, argv); ... return app.exec(); diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp index 8c80ec1eba..4300fc2da9 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qabstractfileengine.cpp @@ -1,17 +1,21 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +using namespace Qt::StringLiterals; + //! [0] class ZipEngineHandler : public QAbstractFileEngineHandler { public: - QAbstractFileEngine *create(const QString &fileName) const override; + std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override; }; -QAbstractFileEngine *ZipEngineHandler::create(const QString &fileName) const +std::unique_ptr<QAbstractFileEngine> ZipEngineHandler::create(const QString &fileName) const { // ZipEngineHandler returns a ZipEngine for all .zip files - return fileName.toLower().endsWith(".zip") ? new ZipEngine(fileName) : 0; + if (fileName.toLower().endsWith(".zip"_L1)) + return std::make_unique<ZipEngine>(fileName); + return {}; } int main(int argc, char **argv) @@ -27,21 +31,24 @@ int main(int argc, char **argv) } //! [0] - //! [1] -QAbstractSocketEngine *ZipEngineHandler::create(const QString &fileName) const +std::unique_ptr<QAbstractFileEngine> ZipEngineHandler::create(const QString &fileName) const { // ZipEngineHandler returns a ZipEngine for all .zip files - return fileName.toLower().endsWith(".zip") ? new ZipEngine(fileName) : 0; + if (fileName.toLower().endsWith(".zip"_L1)) + return std::make_unique<ZipEngine>(fileName); + else + return {}; } //! [1] //! [2] -QAbstractFileEngineIterator * -CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filterNames) +QAbstractFileEngine::IteratorUniquePtr +CustomFileEngine::beginEntryList(const QString &path, QDir::Filters filters, + const QStringList &filterNames) { - return new CustomFileEngineIterator(filters, filterNames); + return std::make_unique<CustomFileEngineIterator>(path, filters, filterNames); } //! [2] @@ -50,25 +57,23 @@ CustomFileEngine::beginEntryList(QDir::Filters filters, const QStringList &filte class CustomIterator : public QAbstractFileEngineIterator { public: - CustomIterator(const QStringList &nameFilters, QDir::Filters filters) - : QAbstractFileEngineIterator(nameFilters, filters), index(0) + CustomIterator(const QString &path, const QStringList &nameFilters, QDir::Filters filters) + : QAbstractFileEngineIterator(path, nameFilters, filters), index(0) { // In a real iterator, these entries are fetched from the // file system based on the value of path(). entries << "entry1" << "entry2" << "entry3"; } - bool hasNext() const override - { - return index < entries.size() - 1; - } - - QString next() override + bool advance() override { - if (!hasNext()) - return QString(); - ++index; - return currentFilePath(); + if (entries.isEmpty()) + return false; + if (index < entries.size() - 1) { + ++index; + return true; + } + return false; } QString currentFileName() override diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qdirlisting.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qdirlisting.cpp new file mode 100644 index 0000000000..231bf48d26 --- /dev/null +++ b/src/corelib/doc/snippets/code/src_corelib_io_qdirlisting.cpp @@ -0,0 +1,70 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QDirListing> + +using namespace Qt::StringLiterals; + +[[maybe_unused]] static void func() { +{ +//! [0] +using ItFlag = QDirListing::IteratorFlag; +for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) { + qDebug() << dirEntry.filePath(); + // /etc/. + // /etc/.. + // /etc/X11 + // /etc/X11/fs + // ... +} +//! [0] +} + +{ +//! [1] +using ItFlag = QDirListing::IteratorFlag; +QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s}, + QDir::NoFilter, ItFlag::Recursive); +for (const auto &dirEntry : dirList) { + QFile f(dirEntry.filePath()); + f.open(QIODevice::ReadOnly); + qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz"; +} +//! [1] +} + +{ +//! [2] +QDirListing audioFileIt(u"/home/johndoe/"_s, {"*.mp3", "*.wav"}, QDir::Files); +//! [2] +} + +{ +//! [3] +using ItFlag = QDirListing::IteratorFlag; +for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) { + // Faster + if (dirEntry.fileName().endsWith(u".conf")) { /* ... */ } + + // This works, but might be potentially slower, since it has to construct a + // QFileInfo, whereas (depending on the implemnetation) the fileName could + // be known already + if (dirEntry.fileInfo().fileName().endsWith(u".conf")) { /* ... */ } +} +//! [3] +} + +{ +//! [4] +using ItFlag = QDirListing::IteratorFlag; +for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) { + // Both approaches are the same, because DirEntry will have to construct + // a QFileInfo to get this info (for example, by calling system stat()) + + if (dirEntry.size() >= 4'000 /* 4KB */) { /* ...*/ } + if (dirEntry.fileInfo().size() >= 4'000 /* 4KB */) { /* ... */ } +} +//! [4] +} + +} diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp index 9e548afafc..a8dd621111 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qfileinfo.cpp @@ -1,11 +1,21 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#include <QDir> +#include <QFileInfo> +using namespace Qt::StringLiterals; + +[[maybe_unused]] static void func() +{ +{ //![newstuff] - QFileInfo fi("c:/temp/foo"); => fi.absoluteFilePath() => "C:/temp/foo" + QFileInfo fi("c:/temp/foo"); + qDebug() << fi.absoluteFilePath(); // "C:/temp/foo" //![newstuff] +} +{ //! [0] #ifdef Q_OS_UNIX @@ -22,7 +32,7 @@ info2.size(); // returns 56201 #endif //! [0] - +} //! [1] #ifdef Q_OS_WIN @@ -41,7 +51,7 @@ info2.size(); // returns 63942 #endif //! [1] - +{ //! [2] QFileInfo info("/usr/bin/env"); @@ -53,50 +63,60 @@ info.setFile("/etc/hosts"); path = info.absolutePath(); // path = /etc base = info.baseName(); // base = hosts //! [2] +} +{ //! [3] QFileInfo fi("/tmp/archive.tar.gz"); QString name = fi.fileName(); // name = "archive.tar.gz" //! [3] +} - +{ //! [4] QFileInfo fi("/Applications/Safari.app"); QString bundle = fi.bundleName(); // name = "Safari" //! [4] +} - +{ //! [5] QFileInfo fi("/tmp/archive.tar.gz"); QString base = fi.baseName(); // base = "archive" //! [5] +} - +{ //! [6] QFileInfo fi("/tmp/archive.tar.gz"); QString base = fi.completeBaseName(); // base = "archive.tar" //! [6] +} - +{ //! [7] QFileInfo fi("/tmp/archive.tar.gz"); QString ext = fi.completeSuffix(); // ext = "tar.gz" //! [7] +} - +{ //! [8] QFileInfo fi("/tmp/archive.tar.gz"); QString ext = fi.suffix(); // ext = "gz" //! [8] +} - +{ +QString fileName = "foo"; //! [9] QFileInfo info(fileName); if (info.isSymLink()) fileName = info.symLinkTarget(); //! [9] +} - +{ //! [10] QFileInfo fi("/tmp/archive.tar.gz"); if (fi.permission(QFile::WriteUser | QFile::ReadGroup)) @@ -104,3 +124,24 @@ if (fi.permission(QFile::WriteUser | QFile::ReadGroup)) if (fi.permission(QFile::WriteGroup | QFile::WriteOther)) qWarning("The group or others can change the file"); //! [10] +} + +{ +//! [11] +// Given a current working directory of "/home/user/Documents/memos/" +QFileInfo info1(u"relativeFile"_s); +qDebug() << info1.absolutePath(); // "/home/user/Documents/memos/" +qDebug() << info1.baseName(); // "relativeFile" +qDebug() << info1.absoluteDir(); // QDir(u"/home/user/Documents/memos"_s) +qDebug() << info1.absoluteDir().path(); // "/home/user/Documents/memos" + +// A QFileInfo on a dir +QFileInfo info2(u"/home/user/Documents/memos"_s); +qDebug() << info2.absolutePath(); // "/home/user/Documents" +qDebug() << info2.baseName(); // "memos" +qDebug() << info2.absoluteDir(); // QDir(u"/home/user/Documents"_s) +qDebug() << info2.absoluteDir().path(); // "/home/user/Documents" +//! [11] +} + +} diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qstorageinfo.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qstorageinfo.cpp index d11368a83d..93029274b1 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qstorageinfo.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qstorageinfo.cpp @@ -1,6 +1,8 @@ // Copyright (C) 2014 Ivan Komissarov // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + //! [0] QStorageInfo storage(qApp->applicationDirPath()); if (storage.isValid() && storage.isReady()) { diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qurl.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qurl.cpp index f002ea6fd5..945f3ae3e7 100644 --- a/src/corelib/doc/snippets/code/src_corelib_io_qurl.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_io_qurl.cpp @@ -39,7 +39,7 @@ sock.connectToHost(url.host(), url.port(80)); //! [4] -http://www.example.com/cgi-bin/drawgraph.cgi?type(pie)color(green) +http://www.example.com/cgi-bin/drawgraph.cgi?type,pie;color,green //! [4] diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp index 2a3a27e94b..8087ff8f8b 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp @@ -1,6 +1,8 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + //! [0] QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0); QApplication::sendEvent(mainWindow, &event); @@ -13,12 +15,6 @@ connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::Qu //! [1] -//! [2] -foreach (const QString &path, app.libraryPaths()) - do_something(path); -//! [2] - - //! [3] // Called once QCoreApplication exists static void preRoutineMyDebugTool() diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qdeadlinetimer.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qdeadlinetimer.cpp index a3b366a588..f7440f2bb0 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qdeadlinetimer.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qdeadlinetimer.cpp @@ -63,25 +63,25 @@ //! [7] //! [8] - return d1.deadlineNSecs() == d2.deadlineNSecs(); + return lhs.deadlineNSecs() == rhs.deadlineNSecs(); //! [8] //! [9] - return d1.deadlineNSecs() != d2.deadlineNSecs(); + return lhs.deadlineNSecs() != rhs.deadlineNSecs(); //! [9] //! [10] - return d1.deadlineNSecs() < d2.deadlineNSecs(); + return lhs.deadlineNSecs() < rhs.deadlineNSecs(); //! [10] //! [11] - return d1.deadlineNSecs() <= d2.deadlineNSecs(); + return lhs.deadlineNSecs() <= rhs.deadlineNSecs(); //! [11] //! [12] - return d1.deadlineNSecs() > d2.deadlineNSecs(); + return lhs.deadlineNSecs() > rhs.deadlineNSecs(); //! [12] //! [13] - return d1.deadlineNSecs() >= d2.deadlineNSecs(); + return lhs.deadlineNSecs() >= rhs.deadlineNSecs(); //! [13] diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp index 36cbdefa1c..c6a48c8827 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp @@ -1,6 +1,8 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + //! [0] void MyWidget::dragEnterEvent(QDragEnterEvent *event) { diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp index 1f3789c635..e3bbac7a3c 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qobject.cpp @@ -366,7 +366,7 @@ QPushButton *button = parentWidget->findChild<QPushButton *>("button1", Qt::Find //! [42] -QListWidget *list = parentWidget->findChild<QListWidget *>(QString(), Qt::FindDirectChildrenOnly); +QListWidget *list = parentWidget->findChild<QListWidget *>(Qt::FindDirectChildrenOnly); //! [42] @@ -469,3 +469,16 @@ const bool wasBlocked = someQObject->blockSignals(true); // no signals here someQObject->blockSignals(wasBlocked); //! [54] + +{ +//! [invalid-timer-id] + QObject *obj; + ... + int id = obj->startTimer(100ms); + if (id > Qt::TimerId::Invalid) + // The timer has been started successfully + + if (id > 0) // Equivalent, albeit less readable + // The timer has been started successfully +//! [invalid-timer-id] +} diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qvariant.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qvariant.cpp index dcae4b6934..7f3f1ce7a0 100644 --- a/src/corelib/doc/snippets/code/src_corelib_kernel_qvariant.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qvariant.cpp @@ -1,6 +1,8 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + //! [0] QDataStream out(...); QVariant v(123); // The variant now contains an int diff --git a/src/corelib/doc/snippets/code/src_corelib_serialization_qcborstream.cpp b/src/corelib/doc/snippets/code/src_corelib_serialization_qcborstream.cpp index 51b6bbbf46..acb5a6272e 100644 --- a/src/corelib/doc/snippets/code/src_corelib_serialization_qcborstream.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_serialization_qcborstream.cpp @@ -183,7 +183,7 @@ using namespace Qt::StringLiterals; //! [21] //! [22] - void appendMap(QCborStreamWriter &writer, const QList<QPair<int, QString>> &values) + void appendMap(QCborStreamWriter &writer, const QList<std::pair<int, QString>> &values) { writer.startMap(); for (const auto pair : values) { @@ -271,12 +271,12 @@ using namespace Qt::StringLiterals; { QString result; auto r = reader.readString(); - while (r.code == QCborStreamReader::Ok) { + while (r.status == QCborStreamReader::Ok) { result += r.data; r = reader.readString(); } - if (r.code == QCborStreamReader::Error) { + if (r.status == QCborStreamReader::Error) { // handle error condition result.clear(); } @@ -289,12 +289,12 @@ using namespace Qt::StringLiterals; { QBytearray result; auto r = reader.readBytearray(); - while (r.code == QCborStreamReader::Ok) { + while (r.status == QCborStreamReader::Ok) { result += r.data; r = reader.readByteArray(); } - if (r.code == QCborStreamReader::Error) { + if (r.status == QCborStreamReader::Error) { // handle error condition result.clear(); } diff --git a/src/corelib/doc/snippets/code/src_corelib_serialization_qdatastream.cpp b/src/corelib/doc/snippets/code/src_corelib_serialization_qdatastream.cpp index 296a341b11..dfdebe6a76 100644 --- a/src/corelib/doc/snippets/code/src_corelib_serialization_qdatastream.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_serialization_qdatastream.cpp @@ -2,11 +2,11 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause //! [0] - QDataStream &operator<<(QDataStream &, const QXxx &); - QDataStream &operator>>(QDataStream &, QXxx &); +QDataStream &operator<<(QDataStream &, const QXxx &); +QDataStream &operator>>(QDataStream &, QXxx &); //! [0] //! [1] - QDataStream & operator<< (QDataStream& stream, const QImage& image); - QDataStream & operator>> (QDataStream& stream, QImage& image); +QDataStream &operator<<(QDataStream &stream, const QImage &image); +QDataStream &operator>>(QDataStream &stream, QImage &image); //! [1] diff --git a/src/corelib/doc/snippets/code/src_corelib_text_qbytearray.cpp b/src/corelib/doc/snippets/code/src_corelib_text_qbytearray.cpp index 65e7234608..a4fecc41f9 100644 --- a/src/corelib/doc/snippets/code/src_corelib_text_qbytearray.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_text_qbytearray.cpp @@ -472,4 +472,10 @@ QByteArray byteArray = "test"; emscripten::val uint8array = QByteArray::toEcmaUint8Array(byteArray); //! [56] +//! [57] +QByteArray x = "Five pineapples"_ba; +x.slice(5); // x == "pineapples" +x.slice(4, 3); // x == "app" +//! [57] + } diff --git a/src/corelib/doc/snippets/code/src_corelib_text_qstaticlatin1stringmatcher.cpp b/src/corelib/doc/snippets/code/src_corelib_text_qstaticlatin1stringmatcher.cpp new file mode 100644 index 0000000000..ae6e19e471 --- /dev/null +++ b/src/corelib/doc/snippets/code/src_corelib_text_qstaticlatin1stringmatcher.cpp @@ -0,0 +1,8 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +//! [0] +static constexpr auto matcher = qMakeStaticCaseSensitiveLatin1StringViewMatcher("needle"); +//! [0] +//! [1] +static constexpr auto matcher = qMakeStaticCaseInsensitiveLatin1StringViewMatcher("needle"); +//! [1] diff --git a/src/corelib/doc/snippets/code/src_corelib_text_qstringconverter.cpp b/src/corelib/doc/snippets/code/src_corelib_text_qstringconverter.cpp index e7bd39c95c..b5bfc9cd55 100644 --- a/src/corelib/doc/snippets/code/src_corelib_text_qstringconverter.cpp +++ b/src/corelib/doc/snippets/code/src_corelib_text_qstringconverter.cpp @@ -34,3 +34,27 @@ while (new_data_available()) { encoded += fromUtf16(chunk); } //! [3] + +{ +//! [4] +QByteArray encodedString = "..."; +auto toUtf16 = QStringDecoder(QStringDecoder::Utf8); +auto data = toUtf16(encodedString); // data's type is QStringDecoder::EncodedData<const QByteArray &> +QString string = toUtf16(encodedString); // Implicit conversion to QString + +// Here you have to cast "data" to QString +auto func = [&]() { return !toUtf16.hasError() ? QString(data) : u"foo"_s; } +//! [4] +} + +{ +//! [5] +QString string = "..."; +auto fromUtf16 = QStringEncoder(QStringEncoder::Utf8); +auto data = fromUtf16(string); // data's type is QStringEncoder::DecodedData<const QString &> +QByteArray encodedString = fromUtf16(string); // Implicit conversion to QByteArray + +// Here you have to cast "data" to QByteArray +auto func = [&]() { return !fromUtf16.hasError() ? QByteArray(data) : "foo"_ba; } +//! [5] +} diff --git a/src/corelib/doc/snippets/code/src_gui_itemviews_qidentityproxymodel.cpp b/src/corelib/doc/snippets/code/src_gui_itemviews_qidentityproxymodel.cpp index 52934b6159..4ef1891cdb 100644 --- a/src/corelib/doc/snippets/code/src_gui_itemviews_qidentityproxymodel.cpp +++ b/src/corelib/doc/snippets/code/src_gui_itemviews_qidentityproxymodel.cpp @@ -17,10 +17,16 @@ class DateFormatProxyModel : public QIdentityProxyModel return QIdentityProxyModel::data(index, role); const QDateTime dateTime = sourceModel()->data(SourceClass::DateRole).toDateTime(); - return dateTime.toString(m_formatString); } + QMap<int, QVariant> itemData(const QModelIndex &proxyIndex) const override + { + QMap<int, QVariant> map = QIdentityProxyModel::itemData(proxyIndex); + map[Qt::DisplayRole] = data(proxyIndex); + return map; + } + private: QString m_formatString; }; diff --git a/src/corelib/doc/snippets/customtype/customtypeexample.cpp b/src/corelib/doc/snippets/customtype/customtypeexample.cpp new file mode 100644 index 0000000000..afa2c4b268 --- /dev/null +++ b/src/corelib/doc/snippets/customtype/customtypeexample.cpp @@ -0,0 +1,90 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#include <QCoreApplication> +#include <QDebug> +#include <QVariant> + +//message.h + +//! [custom type definition] +class Message +{ +public: + Message() = default; + ~Message() = default; + Message(const Message &) = default; + Message &operator=(const Message &) = default; + + Message(const QString &body, const QStringList &headers); + + QStringView body() const; + QStringList headers() const; + +private: + QString m_body; + QStringList m_headers; +}; +//! [custom type definition] + +//! [custom type meta-type declaration] +Q_DECLARE_METATYPE(Message); +//! [custom type meta-type declaration] + +//! [custom type streaming operator declaration] +QDebug operator<<(QDebug dbg, const Message &message); +//! [custom type streaming operator declaration] + +// message.cpp + +//! [custom type streaming operator] +QDebug operator<<(QDebug dbg, const Message &message) +{ + const QList<QStringView> pieces = message.body().split(u"\r\n", Qt::SkipEmptyParts); + if (pieces.isEmpty()) + dbg.nospace() << "Message()"; + else if (pieces.size() == 1) + dbg.nospace() << "Message(" << pieces.first() << ")"; + else + dbg.nospace() << "Message(" << pieces.first() << " ...)"; + return dbg; +} +//! [custom type streaming operator] + +//! [getter functions] +QStringView Message::body() const +{ + return m_body; +} + +QStringList Message::headers() const +{ + return m_headers; +} +//! [getter functions] + +//main.cpp + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + QStringList headers; + headers << "Subject: Hello World" + << "From: address@example.com"; + QString body = "This is a test.\r\n"; + //! [printing a custom type] + Message message(body, headers); + qDebug() << "Original:" << message; + //! [printing a custom type] + //! [storing a custom value] + QVariant stored; + stored.setValue(message); + //! [storing a custom value] + qDebug() << "Stored:" << stored; + //! [retrieving a custom value] + Message retrieved = qvariant_cast<Message>(stored); + qDebug() << "Retrieved:" << retrieved; + retrieved = qvariant_cast<Message>(stored); + qDebug() << "Retrieved:" << retrieved; + //! [retrieving a custom value] + return 0; +} diff --git a/src/corelib/doc/snippets/qsignalmapper/buttonwidget.cpp b/src/corelib/doc/snippets/qsignalmapper/buttonwidget.cpp index 235d8b27db..e2e97fa11c 100644 --- a/src/corelib/doc/snippets/qsignalmapper/buttonwidget.cpp +++ b/src/corelib/doc/snippets/qsignalmapper/buttonwidget.cpp @@ -14,7 +14,7 @@ ButtonWidget::ButtonWidget(const QStringList &texts, QWidget *parent) QGridLayout *gridLayout = new QGridLayout(this); for (int i = 0; i < texts.size(); ++i) { QPushButton *button = new QPushButton(texts[i]); - connect(button, &QPushButton::clicked, signalMapper, &QSignalMapper::map); + connect(button, &QPushButton::clicked, signalMapper, qOverload<>(&QSignalMapper::map)); //! [0] //! [1] signalMapper->setMapping(button, texts[i]); gridLayout->addWidget(button, i / 3, i % 3); diff --git a/src/corelib/doc/snippets/qstring/main.cpp b/src/corelib/doc/snippets/qstring/main.cpp index c6f35339c6..8b39ae2f13 100644 --- a/src/corelib/doc/snippets/qstring/main.cpp +++ b/src/corelib/doc/snippets/qstring/main.cpp @@ -41,6 +41,7 @@ public: void firstFunction(); void leftJustifiedFunction(); void slicedFunction(); + void sliceFunction(); void numberFunction(); void prependFunction(); @@ -909,6 +910,15 @@ void Widget::arrayOperator() //! [85] } +void Widget::sliceFunction() +{ + //! [86] + QString x = u"Nine pineapples"_s; + x.slice(5); // x == "pineapples" + x.slice(4, 3); // x == "app" + //! [86] +} + int main(int argc, char *argv[]) { diff --git a/src/corelib/doc/snippets/qstring/stringbuilder.cpp b/src/corelib/doc/snippets/qstring/stringbuilder.cpp index a48f9858b3..c3a709bd4c 100644 --- a/src/corelib/doc/snippets/qstring/stringbuilder.cpp +++ b/src/corelib/doc/snippets/qstring/stringbuilder.cpp @@ -27,10 +27,10 @@ using namespace Qt::StringLiterals; //! [6] QString str("QStringBuilder"); - // "s" type is deduced as QStringBuilder + // "s" type is deduced as QStringBuilder<...> auto s = "Like hot glue, " % str % " concatenates strings"; - // Similarly the return type of this lambda is deduced as QStringBuilder + // Similarly the return type of this lambda is deduced as QStringBuilder<...> auto concatenateStr = []() { return "Like hot glue, " % str % " concatenates strings"; }; @@ -39,7 +39,7 @@ using namespace Qt::StringLiterals; //! [7] QString s = "Like hot glue, " % str % " concatenates strings"; - // With a lambda, specify a trailing return type + // With a lambda, specify a trailing return type: auto concatenateStr = []() -> QString { return "Like hot glue, " % str % " concatenates strings"; }; diff --git a/src/corelib/doc/snippets/qstringlist/main.cpp b/src/corelib/doc/snippets/qstringlist/main.cpp index e9567fb107..1b7453cf6a 100644 --- a/src/corelib/doc/snippets/qstringlist/main.cpp +++ b/src/corelib/doc/snippets/qstringlist/main.cpp @@ -93,6 +93,13 @@ Widget::Widget(QWidget *parent) // list == ["Bill Clinton", "Bill Murray"] //! [17] + { +//! [18] + QStringList veryLongList; + QStringMatcher matcher(u"Straße", Qt::CaseInsensitive); + QStringList filtered = veryLongList.filter(matcher); +//! [18] + } } int main(int argc, char *argv[]) diff --git a/src/corelib/doc/snippets/resource-system/CMakeLists.txt b/src/corelib/doc/snippets/resource-system/CMakeLists.txt index 267e9a59ad..f0ec0f6816 100644 --- a/src/corelib/doc/snippets/resource-system/CMakeLists.txt +++ b/src/corelib/doc/snippets/resource-system/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause project(my_app) cmake_minimum_required(VERSION 3.16) diff --git a/src/corelib/doc/snippets/resource-system/application.pro b/src/corelib/doc/snippets/resource-system/application.pro index 4b1f1d7635..42c66eba4c 100644 --- a/src/corelib/doc/snippets/resource-system/application.pro +++ b/src/corelib/doc/snippets/resource-system/application.pro @@ -2,9 +2,9 @@ TEMPLATE = app QT += qml widgets -#! [0] +#! [0] #! [qrc] RESOURCES = application.qrc -#! [0] +#! [0] #! [qrc] #! [1] resources.files = \ diff --git a/src/corelib/doc/snippets/signalsandslots/signalsandslots.h b/src/corelib/doc/snippets/signalsandslots/signalsandslots.h index 2f5a53231c..a590e8fd5e 100644 --- a/src/corelib/doc/snippets/signalsandslots/signalsandslots.h +++ b/src/corelib/doc/snippets/signalsandslots/signalsandslots.h @@ -33,6 +33,8 @@ class Counter : public QObject { Q_OBJECT +// Note. The Q_OBJECT macro starts a private section. +// To declare public members, use the 'public:' access modifier. public: Counter() { m_value = 0; } diff --git a/src/corelib/doc/snippets/timers/analogclock.cpp b/src/corelib/doc/snippets/timers/analogclock.cpp index 0e910f405b..5241e57879 100644 --- a/src/corelib/doc/snippets/timers/analogclock.cpp +++ b/src/corelib/doc/snippets/timers/analogclock.cpp @@ -5,6 +5,7 @@ #include "analogclock.h" +// QTimer //! [0] AnalogClock::AnalogClock(QWidget *parent) //! [0] //! [2] @@ -25,6 +26,21 @@ AnalogClock::AnalogClock(QWidget *parent) } //! [7] +//! [analogclock-qchronotimer] +AnalogClock::AnalogClock(QWidget *parent) + + : QWidget(parent) +{ + auto *timer = new QChronoTimer(1s, this); + connect(timer, &QTimer::timeout, this, QOverload<>::of(&AnalogClock::update)); + timer->start(); + ... + ... + setWindowTitle(tr("Analog Clock")); + resize(200, 200); +} +//! [analogclock-qchronotimer] + void AnalogClock::paintEvent(QPaintEvent *) { static const QPoint hourHand[3] = { diff --git a/src/corelib/doc/snippets/timers/timers.cpp b/src/corelib/doc/snippets/timers/timers.cpp index c89db6890c..1a97ba535e 100644 --- a/src/corelib/doc/snippets/timers/timers.cpp +++ b/src/corelib/doc/snippets/timers/timers.cpp @@ -1,8 +1,12 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#include <QChronoTimer> +#include <QObject> #include <QTimer> +using namespace std::chrono; + class Foo : public QObject { public: @@ -35,7 +39,45 @@ Foo::Foo() } } -int main() +// QChronoTimer +class MyWidget : QObject { + MyWidget() + { +//! [qchronotimer-singleshot] + MyWidget widget; + QChronoTimer::singleShot(200ms, &widget, &MyWidget::updateCaption); +//! [qchronotimer-singleshot] +//! [zero-timer] + // The default interval is 0ns + QChronoTimer *timer = new QChronoTimer(this); + connect(timer, &QChronoTimer::timeout, this, &MyWidget::processOneThing); + timer->start(); +//! [zero-timer] + + { +//! [timer-interval-in-ctor] + QChronoTimer *timer = new QChronoTimer(1s, this); + connect(timer, &QChronoTimer::timeout, this, &MyWidget::processOneThing); + timer->start(); +//! [timer-interval-in-ctor] + } + + { +//! [timer-setinterval] + QChronoTimer *timer = new QChronoTimer(this); + connect(timer, &QChronoTimer::timeout, this, &MyWidget::processOneThing); + timer->setInterval(1s); + timer->start(); +//! [timer-setinterval] + } + } + +public Q_SLOTS: + void processOneThing(); +}; + +int main() +{ } |