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