From 09da6828b86140c456aa950b0a880692a38e9a03 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Wed, 17 Mar 2021 15:50:40 +0300 Subject: [PATCH 1/8] Use complete types in container declarations Qt 6 disallows to use incomplete types in container declarations in some cases, e.g. in parameters of signals/slots. --- src/base/bittorrent/session.cpp | 1 - src/base/bittorrent/session.h | 2 +- src/base/net/reverseresolution.cpp | 1 - src/base/net/reverseresolution.h | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 99439a360..5f5fd861d 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -100,7 +100,6 @@ #include "statistics.h" #include "torrentimpl.h" #include "tracker.h" -#include "trackerentry.h" static const char PEER_ID[] = "qB"; static const char RESUME_FOLDER[] = "BT_backup"; diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index c6bd8c813..ac5d39e26 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -50,6 +50,7 @@ #include "cachestatus.h" #include "sessionstatus.h" #include "torrentinfo.h" +#include "trackerentry.h" class QFile; class QNetworkConfiguration; @@ -100,7 +101,6 @@ namespace BitTorrent class TorrentImpl; class Tracker; struct LoadTorrentParams; - struct TrackerEntry; enum class MoveStorageMode; diff --git a/src/base/net/reverseresolution.cpp b/src/base/net/reverseresolution.cpp index b53ea1989..8349229e3 100644 --- a/src/base/net/reverseresolution.cpp +++ b/src/base/net/reverseresolution.cpp @@ -28,7 +28,6 @@ #include "reverseresolution.h" -#include #include #include diff --git a/src/base/net/reverseresolution.h b/src/base/net/reverseresolution.h index 7e4c4af7a..3e4a5d2d9 100644 --- a/src/base/net/reverseresolution.h +++ b/src/base/net/reverseresolution.h @@ -29,9 +29,9 @@ #pragma once #include +#include #include -class QHostAddress; class QHostInfo; class QString; From a8127d610268d1b8aec35cee68a4efc45996f6c3 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Thu, 18 Mar 2021 10:43:07 +0300 Subject: [PATCH 2/8] Use valid event type in QWidget::enterEvent() --- src/gui/properties/piecesbar.cpp | 4 ++++ src/gui/properties/piecesbar.h | 14 +++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/gui/properties/piecesbar.cpp b/src/gui/properties/piecesbar.cpp index d9da364cb..0c9a253e1 100644 --- a/src/gui/properties/piecesbar.cpp +++ b/src/gui/properties/piecesbar.cpp @@ -143,7 +143,11 @@ bool PiecesBar::event(QEvent *e) return base::event(e); } +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) +void PiecesBar::enterEvent(QEnterEvent *e) +#else void PiecesBar::enterEvent(QEvent *e) +#endif { m_hovered = true; base::enterEvent(e); diff --git a/src/gui/properties/piecesbar.h b/src/gui/properties/piecesbar.h index 66f2f3074..ec70aab6c 100644 --- a/src/gui/properties/piecesbar.h +++ b/src/gui/properties/piecesbar.h @@ -54,15 +54,19 @@ public: virtual void clear(); // QObject interface - virtual bool event(QEvent*) override; + virtual bool event(QEvent *e) override; protected: // QWidget interface - void enterEvent(QEvent*) override; - void leaveEvent(QEvent*) override; - void mouseMoveEvent(QMouseEvent*) override; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + void enterEvent(QEnterEvent *e) override; +#else + void enterEvent(QEvent *e) override; +#endif + void leaveEvent(QEvent *e) override; + void mouseMoveEvent(QMouseEvent *e) override; - void paintEvent(QPaintEvent*) override; + void paintEvent(QPaintEvent *e) override; void requestImageUpdate(); QColor backgroundColor() const; From 561fbf2cca3a97019286a504ecd11b063e50437f Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Fri, 19 Mar 2021 11:16:04 +0300 Subject: [PATCH 3/8] Don't use removed QTextStream::setCodec() QTextStream encodes as UTF-8 by default. --- src/app/filelogger.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/filelogger.cpp b/src/app/filelogger.cpp index 743c9bcad..143bc287b 100644 --- a/src/app/filelogger.cpp +++ b/src/app/filelogger.cpp @@ -126,7 +126,9 @@ void FileLogger::addLogMessage(const Log::Msg &msg) if (!m_logFile.isOpen()) return; QTextStream stream(&m_logFile); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) stream.setCodec("UTF-8"); +#endif switch (msg.type) { From 135cad576c98bc6639acdabfcc85f32e2cf7c65a Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Fri, 19 Mar 2021 11:26:52 +0300 Subject: [PATCH 4/8] Don't use removed QApplication attribute --- src/app/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index aceb0c1e4..f3c20339e 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -235,7 +235,7 @@ int main(int argc, char *argv[]) // 3. https://bugreports.qt.io/browse/QTBUG-46015 qputenv("QT_BEARER_POLL_TIMEOUT", QByteArray::number(-1)); -#if !defined(DISABLE_GUI) +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) && !defined(DISABLE_GUI) // this is the default in Qt6 app->setAttribute(Qt::AA_DisableWindowContextHelpButton); #endif From a2302284410a0ece758b3eb1a1d4f98663691e8c Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Fri, 19 Mar 2021 16:05:02 +0300 Subject: [PATCH 5/8] Don't compare bool with int In Qt6 QHash::remove() returns bool to indicate operation status. --- src/base/settingsstorage.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/base/settingsstorage.cpp b/src/base/settingsstorage.cpp index d9ac0a337..37eabc625 100644 --- a/src/base/settingsstorage.cpp +++ b/src/base/settingsstorage.cpp @@ -224,7 +224,11 @@ void SettingsStorage::removeValue(const QString &key) { const QString realKey = mapKey(key); const QWriteLocker locker(&m_lock); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + if (m_data.remove(realKey)) +#else if (m_data.remove(realKey) > 0) +#endif { m_dirty = true; m_timer.start(); From 102cc684dd0eb5591b6f973ea3f4cf3ead547427 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Fri, 19 Mar 2021 10:28:40 +0300 Subject: [PATCH 6/8] Replace Qt Windows Extras features with native ones --- src/gui/torrentcontentmodel.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/torrentcontentmodel.cpp b/src/gui/torrentcontentmodel.cpp index 28b072a78..0f661baef 100644 --- a/src/gui/torrentcontentmodel.cpp +++ b/src/gui/torrentcontentmodel.cpp @@ -37,7 +37,9 @@ #if defined(Q_OS_WIN) #include #include +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) #include +#endif #else #include #include @@ -118,7 +120,11 @@ namespace if (FAILED(hr)) return {}; +#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + auto iconPixmap = QPixmap::fromImage(QImage::fromHICON(sfi.hIcon)); +#else QPixmap iconPixmap = QtWin::fromHICON(sfi.hIcon); +#endif ::DestroyIcon(sfi.hIcon); return iconPixmap; } From a93391e247e05ca3f18bc9304df9e6dbb4bf4252 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Fri, 19 Mar 2021 10:28:40 +0300 Subject: [PATCH 7/8] Drop QNetworkConfigurationManager usage --- src/base/bittorrent/session.cpp | 8 ++++++++ src/base/bittorrent/session.h | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/base/bittorrent/session.cpp b/src/base/bittorrent/session.cpp index 5f5fd861d..c32fffaf3 100644 --- a/src/base/bittorrent/session.cpp +++ b/src/base/bittorrent/session.cpp @@ -63,7 +63,9 @@ #include #include #include +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) #include +#endif #include #include #include @@ -465,7 +467,9 @@ Session::Session(QObject *parent) , m_statistics {new Statistics {this}} , m_ioThread {new QThread {this}} , m_recentErroredTorrentsTimer {new QTimer {this}} +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) , m_networkManager {new QNetworkConfigurationManager {this}} +#endif { if (port() < 0) m_port = Utils::Random::rand(1024, 65535); @@ -506,11 +510,13 @@ Session::Session(QObject *parent) , &Net::ProxyConfigurationManager::proxyConfigurationChanged , this, &Session::configureDeferred); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) // Network configuration monitor connect(m_networkManager, &QNetworkConfigurationManager::onlineStateChanged, this, &Session::networkOnlineStateChanged); connect(m_networkManager, &QNetworkConfigurationManager::configurationAdded, this, &Session::networkConfigurationChange); connect(m_networkManager, &QNetworkConfigurationManager::configurationRemoved, this, &Session::networkConfigurationChange); connect(m_networkManager, &QNetworkConfigurationManager::configurationChanged, this, &Session::networkConfigurationChange); +#endif m_resumeDataSavingManager = new ResumeDataSavingManager {m_resumeFolderPath}; m_resumeDataSavingManager->moveToThread(m_ioThread); @@ -2445,6 +2451,7 @@ void Session::setTempPath(QString path) torrent->handleTempPathChanged(); } +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) void Session::networkOnlineStateChanged(const bool online) { LogMsg(tr("System network status changed to %1", "e.g: System network status changed to ONLINE").arg(online ? tr("ONLINE") : tr("OFFLINE")), Log::INFO); @@ -2465,6 +2472,7 @@ void Session::networkConfigurationChange(const QNetworkConfiguration &cfg) configureListeningInterface(); } } +#endif QStringList Session::getListeningIPs() const { diff --git a/src/base/bittorrent/session.h b/src/base/bittorrent/session.h index ac5d39e26..7a32f6869 100644 --- a/src/base/bittorrent/session.h +++ b/src/base/bittorrent/session.h @@ -53,8 +53,10 @@ #include "trackerentry.h" class QFile; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) class QNetworkConfiguration; class QNetworkConfigurationManager; +#endif class QString; class QThread; class QTimer; @@ -542,9 +544,11 @@ namespace BitTorrent void handleDownloadFinished(const Net::DownloadResult &result); void fileSearchFinished(const TorrentID &id, const QString &savePath, const QStringList &fileNames); +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) // Session reconfiguration triggers void networkOnlineStateChanged(bool online); void networkConfigurationChange(const QNetworkConfiguration &); +#endif private: struct MoveStorageJob @@ -784,8 +788,9 @@ namespace BitTorrent SessionStatus m_status; CacheStatus m_cacheStatus; - +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) QNetworkConfigurationManager *m_networkManager = nullptr; +#endif QList m_moveStorageQueue; From cd7bdc899864c8080093d41a56cb955ceb1173c0 Mon Sep 17 00:00:00 2001 From: "Vladimir Golovnev (Glassez)" Date: Thu, 18 Mar 2021 10:40:05 +0300 Subject: [PATCH 8/8] Use qsizetype instead of int where required by Qt6 --- src/gui/addnewtorrentdialog.cpp | 6 +++--- src/gui/properties/propertieswidget.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/addnewtorrentdialog.cpp b/src/gui/addnewtorrentdialog.cpp index 6546a845a..e6d66993b 100644 --- a/src/gui/addnewtorrentdialog.cpp +++ b/src/gui/addnewtorrentdialog.cpp @@ -549,10 +549,10 @@ void AddNewTorrentDialog::displayContentTreeMenu(const QPoint &) const QModelIndexList selectedRows = m_ui->contentTreeView->selectionModel()->selectedRows(0); - const int priorityGroups = 3; - const int priorityGroupSize = std::max((selectedRows.length() / priorityGroups), 1); + const qsizetype priorityGroups = 3; + const auto priorityGroupSize = std::max((selectedRows.length() / priorityGroups), 1); - for (int i = 0; i < selectedRows.length(); ++i) + for (qsizetype i = 0; i < selectedRows.length(); ++i) { auto priority = BitTorrent::DownloadPriority::Ignored; switch (i / priorityGroupSize) diff --git a/src/gui/properties/propertieswidget.cpp b/src/gui/properties/propertieswidget.cpp index b05a592e8..90f1ea7f3 100644 --- a/src/gui/properties/propertieswidget.cpp +++ b/src/gui/properties/propertieswidget.cpp @@ -637,10 +637,10 @@ void PropertiesWidget::displayFilesListMenu(const QPoint &) const QModelIndexList selectedRows = m_ui->filesList->selectionModel()->selectedRows(0); - const int priorityGroups = 3; - const int priorityGroupSize = std::max((selectedRows.length() / priorityGroups), 1); + const qsizetype priorityGroups = 3; + const auto priorityGroupSize = std::max((selectedRows.length() / priorityGroups), 1); - for (int i = 0; i < selectedRows.length(); ++i) + for (qsizetype i = 0; i < selectedRows.length(); ++i) { auto priority = BitTorrent::DownloadPriority::Ignored; switch (i / priorityGroupSize)