diff --git a/src/app/cmdoptions.cpp b/src/app/cmdoptions.cpp index 62fce4a5e..ef0bceb6d 100644 --- a/src/app/cmdoptions.cpp +++ b/src/app/cmdoptions.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #if defined(Q_OS_WIN) && !defined(DISABLE_GUI) #include @@ -525,59 +524,57 @@ QString wrapText(const QString &text, int initialIndentation = USAGE_TEXT_COLUMN QString makeUsage(const QString &prgName) { - QString text; - QTextStream stream(&text, QIODevice::WriteOnly); - QString indentation = QString(USAGE_INDENTATION, u' '); + const QString indentation {USAGE_INDENTATION, u' '}; - stream << QObject::tr("Usage:") << '\n' - << indentation << prgName << u" [options] [( | )...]"_qs << '\n' + const QString text = QObject::tr("Usage:") + u'\n' + + indentation + prgName + u" [options] [( | )...]" + u'\n' - << QObject::tr("Options:") << '\n' + + QObject::tr("Options:") + u'\n' #if !defined(Q_OS_WIN) || defined(DISABLE_GUI) - << SHOW_VERSION_OPTION.usage() << wrapText(QObject::tr("Display program version and exit")) << '\n' + + SHOW_VERSION_OPTION.usage() + wrapText(QObject::tr("Display program version and exit")) + u'\n' #endif - << SHOW_HELP_OPTION.usage() << wrapText(QObject::tr("Display this help message and exit")) << '\n' - << WEBUI_PORT_OPTION.usage(QObject::tr("port")) - << wrapText(QObject::tr("Change the Web UI port")) - << '\n' + + SHOW_HELP_OPTION.usage() + wrapText(QObject::tr("Display this help message and exit")) + u'\n' + + WEBUI_PORT_OPTION.usage(QObject::tr("port")) + + wrapText(QObject::tr("Change the Web UI port")) + + u'\n' #ifndef DISABLE_GUI - << NO_SPLASH_OPTION.usage() << wrapText(QObject::tr("Disable splash screen")) << '\n' + + NO_SPLASH_OPTION.usage() + wrapText(QObject::tr("Disable splash screen")) + u'\n' #elif !defined(Q_OS_WIN) - << DAEMON_OPTION.usage() << wrapText(QObject::tr("Run in daemon-mode (background)")) << '\n' + + DAEMON_OPTION.usage() + wrapText(QObject::tr("Run in daemon-mode (background)")) + u'\n' #endif //: Use appropriate short form or abbreviation of "directory" - << PROFILE_OPTION.usage(QObject::tr("dir")) - << wrapText(QObject::tr("Store configuration files in ")) << '\n' - << CONFIGURATION_OPTION.usage(QObject::tr("name")) - << wrapText(QObject::tr("Store configuration files in directories qBittorrent_")) << '\n' - << RELATIVE_FASTRESUME.usage() - << wrapText(QObject::tr("Hack into libtorrent fastresume files and make file paths relative " - "to the profile directory")) << '\n' - << Option::padUsageText(QObject::tr("files or URLs")) - << wrapText(QObject::tr("Download the torrents passed by the user")) << '\n' - << '\n' + + PROFILE_OPTION.usage(QObject::tr("dir")) + + wrapText(QObject::tr("Store configuration files in ")) + u'\n' + + CONFIGURATION_OPTION.usage(QObject::tr("name")) + + wrapText(QObject::tr("Store configuration files in directories qBittorrent_")) + u'\n' + + RELATIVE_FASTRESUME.usage() + + wrapText(QObject::tr("Hack into libtorrent fastresume files and make file paths relative " + "to the profile directory")) + u'\n' + + Option::padUsageText(QObject::tr("files or URLs")) + + wrapText(QObject::tr("Download the torrents passed by the user")) + u'\n' + + u'\n' - << wrapText(QObject::tr("Options when adding new torrents:"), 0) << '\n' - << SAVE_PATH_OPTION.usage(QObject::tr("path")) << wrapText(QObject::tr("Torrent save path")) << '\n' - << PAUSED_OPTION.usage() << wrapText(QObject::tr("Add torrents as started or paused")) << '\n' - << SKIP_HASH_CHECK_OPTION.usage() << wrapText(QObject::tr("Skip hash check")) << '\n' - << CATEGORY_OPTION.usage(QObject::tr("name")) - << wrapText(QObject::tr("Assign torrents to category. If the category doesn't exist, it will be " - "created.")) << '\n' - << SEQUENTIAL_OPTION.usage() << wrapText(QObject::tr("Download files in sequential order")) << '\n' - << FIRST_AND_LAST_OPTION.usage() - << wrapText(QObject::tr("Download first and last pieces first")) << '\n' - << SKIP_DIALOG_OPTION.usage() - << wrapText(QObject::tr("Specify whether the \"Add New Torrent\" dialog opens when adding a " - "torrent.")) << '\n' - << '\n' + + wrapText(QObject::tr("Options when adding new torrents:"), 0) + u'\n' + + SAVE_PATH_OPTION.usage(QObject::tr("path")) + wrapText(QObject::tr("Torrent save path")) + u'\n' + + PAUSED_OPTION.usage() + wrapText(QObject::tr("Add torrents as started or paused")) + u'\n' + + SKIP_HASH_CHECK_OPTION.usage() + wrapText(QObject::tr("Skip hash check")) + u'\n' + + CATEGORY_OPTION.usage(QObject::tr("name")) + + wrapText(QObject::tr("Assign torrents to category. If the category doesn't exist, it will be " + "created.")) + u'\n' + + SEQUENTIAL_OPTION.usage() + wrapText(QObject::tr("Download files in sequential order")) + u'\n' + + FIRST_AND_LAST_OPTION.usage() + + wrapText(QObject::tr("Download first and last pieces first")) + u'\n' + + SKIP_DIALOG_OPTION.usage() + + wrapText(QObject::tr("Specify whether the \"Add New Torrent\" dialog opens when adding a " + "torrent.")) + u'\n' + + u'\n' - << wrapText(QObject::tr("Option values may be supplied via environment variables. For option named " + + wrapText(QObject::tr("Option values may be supplied via environment variables. For option named " "'parameter-name', environment variable name is 'QBT_PARAMETER_NAME' (in upper " "case, '-' replaced with '_'). To pass flag values, set the variable to '1' or " - "'TRUE'. For example, to disable the splash screen: "), 0) << "\n" - << u"QBT_NO_SPLASH=1 "_qs << prgName << '\n' - << wrapText(QObject::tr("Command line parameters take precedence over environment variables"), 0) << '\n'; + "'TRUE'. For example, to disable the splash screen: "), 0) + u'\n' + + u"QBT_NO_SPLASH=1 " + prgName + u'\n' + + wrapText(QObject::tr("Command line parameters take precedence over environment variables"), 0) + u'\n'; return text; } diff --git a/src/base/torrentfileswatcher.cpp b/src/base/torrentfileswatcher.cpp index de28a752d..b6a5a7e48 100644 --- a/src/base/torrentfileswatcher.cpp +++ b/src/base/torrentfileswatcher.cpp @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -522,9 +521,11 @@ void TorrentFilesWatcher::Worker::processFolder(const Path &path, const Path &wa QFile file {filePath.data()}; if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream str {&file}; - while (!str.atEnd()) - emit magnetFound(BitTorrent::MagnetUri(str.readLine()), addTorrentParams); + while (!file.atEnd()) + { + const auto line = QString::fromLatin1(file.readLine()).trimmed(); + emit magnetFound(BitTorrent::MagnetUri(line), addTorrentParams); + } file.close(); Utils::Fs::removeFile(filePath); diff --git a/src/gui/properties/piecesbar.cpp b/src/gui/properties/piecesbar.cpp index 57e75178e..cf6d0c09a 100644 --- a/src/gui/properties/piecesbar.cpp +++ b/src/gui/properties/piecesbar.cpp @@ -34,7 +34,6 @@ #include #include #include -#include #include #include "base/bittorrent/torrent.h" @@ -88,25 +87,29 @@ namespace class DetailedTooltipRenderer { public: - DetailedTooltipRenderer(QTextStream &stream, const QString &header) - : m_stream(stream) + DetailedTooltipRenderer(QString &string, const QString &header) + : m_string(string) { - m_stream << header - << R"()"; + m_string += header + + uR"(
)"; } ~DetailedTooltipRenderer() { - m_stream << "
"; + m_string += u""; } void operator()(const QString &size, const Path &path) { - m_stream << R"()" << size << "" << path.toString() << ""; + m_string += uR"()" + + size + + u"" + + path.toString() + + u""; } private: - QTextStream &m_stream; + QString &m_string; }; } @@ -252,17 +255,16 @@ void PiecesBar::showToolTip(const QHelpEvent *e) return; QString toolTipText; - QTextStream stream(&toolTipText, QIODevice::WriteOnly); + const bool showDetailedInformation = QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier); if (showDetailedInformation && m_torrent->hasMetadata()) { const BitTorrent::TorrentInfo torrentInfo = m_torrent->info(); const int imagePos = e->pos().x() - borderWidth; - if ((imagePos >=0) && (imagePos < m_image.width())) + if ((imagePos >= 0) && (imagePos < m_image.width())) { - stream << ""; - PieceIndexToImagePos transform {torrentInfo, m_image}; - int pieceIndex = transform.pieceIndex(imagePos); + const PieceIndexToImagePos transform {torrentInfo, m_image}; + const int pieceIndex = transform.pieceIndex(imagePos); const QVector files {torrentInfo.fileIndicesForPiece(pieceIndex)}; QString tooltipTitle; @@ -278,27 +280,28 @@ void PiecesBar::showToolTip(const QHelpEvent *e) tooltipTitle = tr("File in these pieces"); } - DetailedTooltipRenderer renderer(stream, tooltipTitle); + toolTipText.reserve(files.size() * 128); + toolTipText += u""; - for (int f : files) + DetailedTooltipRenderer renderer {toolTipText, tooltipTitle}; + + for (const int f : files) { const Path filePath = torrentInfo.filePath(f); renderer(Utils::Misc::friendlyUnit(torrentInfo.fileSize(f)), filePath); } - stream << ""; + toolTipText += u""; } } else { - stream << simpleToolTipText(); + toolTipText += simpleToolTipText(); if (showDetailedInformation) // metadata are not available at this point - stream << '\n' << tr("Wait until metadata become available to see detailed information"); + toolTipText += u'\n' + tr("Wait until metadata become available to see detailed information"); else - stream << '\n' << tr("Hold Shift key for detailed information"); + toolTipText += u'\n' + tr("Hold Shift key for detailed information"); } - stream.flush(); - QToolTip::showText(e->globalPos(), toolTipText, this); } diff --git a/src/gui/search/searchwidget.cpp b/src/gui/search/searchwidget.cpp index 49f21ad85..91d9a762c 100644 --- a/src/gui/search/searchwidget.cpp +++ b/src/gui/search/searchwidget.cpp @@ -46,7 +46,6 @@ #include #include #include -#include #include #include "base/global.h" @@ -93,22 +92,20 @@ SearchWidget::SearchWidget(MainWindow *mainWindow) m_ui->setupUi(this); m_ui->tabWidget->tabBar()->installEventFilter(this); - QString searchPatternHint; - QTextStream stream(&searchPatternHint, QIODevice::WriteOnly); - stream << "

" - << tr("A phrase to search for.") << "
" - << tr("Spaces in a search term may be protected by double quotes.") - << "

" - << tr("Example:", "Search phrase example") - << "
" - << tr("foo bar: search for foo and bar", + const QString searchPatternHint = u"

" + + tr("A phrase to search for.") + u"
" + + tr("Spaces in a search term may be protected by double quotes.") + + u"

" + + tr("Example:", "Search phrase example") + + u"
" + + tr("foo bar: search for foo and bar", "Search phrase example, illustrates quotes usage, a pair of " "space delimited words, individal words are highlighted") - << "
" - << tr(""foo bar": search for foo bar", + + u"
" + + tr(""foo bar": search for foo bar", "Search phrase example, illustrates quotes usage, double quoted" "pair of space delimited words, the whole pair is highlighted") - << "

"; + + u"

"; m_ui->lineEditSearchPattern->setToolTip(searchPatternHint); #ifndef Q_OS_MACOS diff --git a/src/gui/utils.cpp b/src/gui/utils.cpp index 3665a82df..a8e8e0f8f 100644 --- a/src/gui/utils.cpp +++ b/src/gui/utils.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include diff --git a/src/gui/utils.h b/src/gui/utils.h index 0b803df82..58c9ac27f 100644 --- a/src/gui/utils.h +++ b/src/gui/utils.h @@ -28,13 +28,12 @@ #pragma once -#include - #include "base/pathfwd.h" class QIcon; class QPixmap; class QPoint; +class QSize; class QWidget; namespace Utils::Gui