From 5d2465cffc2dc3a0b4e7d8716990b212ec9b5556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Wed, 19 Feb 2025 00:20:18 +0100 Subject: [PATCH] Remove all Qt5 < 5.15 workarounds. Qt 5.15 is now the minimal required Qt version. --- .github/workflows/linux.yml | 2 +- README.md | 4 +-- gpxsee.pro | 1 - src/GUI/app.cpp | 2 -- src/GUI/graphview.cpp | 14 +++-------- src/GUI/gui.cpp | 4 --- src/GUI/mapview.cpp | 4 --- src/GUI/optionsdialog.cpp | 6 ----- src/GUI/optionsdialog.h | 2 -- src/GUI/pathitem.cpp | 11 ++------- src/GUI/popup.cpp | 7 ------ src/data/twonavparser.cpp | 13 +++------- src/map/downloader.cpp | 42 ++------------------------------ src/map/downloader.h | 22 ----------------- src/map/mapsforge/rastertile.cpp | 4 --- src/map/textpathitem.cpp | 24 ++++++------------ 16 files changed, 22 insertions(+), 140 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index aef5819e..61287ae7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -8,7 +8,7 @@ on: jobs: build: name: GPXSee - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: config: ['release', 'debug'] diff --git a/README.md b/README.md index 5971d59c..d61d3706 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,8 @@ GPS log file formats. ## Build Build requirements: -* Qt5 >= 5.11 or Qt6 >= 6.2 (Android builds require Qt6) -* C++11 or newer compiler (tested: msvc2019, gcc 7.5.0, clang/Apple LLVM version +* Qt5 >= 5.15 or Qt6 >= 6.2 (Android builds require Qt6) +* C++11 or newer compiler (tested: msvc2022, gcc 11, clang/Apple LLVM version 10.0.0) Build steps: diff --git a/gpxsee.pro b/gpxsee.pro index 7dfebcaa..fb09e503 100644 --- a/gpxsee.pro +++ b/gpxsee.pro @@ -5,7 +5,6 @@ unix:!macx:!android { } VERSION = 13.36 - QT += core \ gui \ gui-private \ diff --git a/src/GUI/app.cpp b/src/GUI/app.cpp index 90463471..6a913bfe 100644 --- a/src/GUI/app.cpp +++ b/src/GUI/app.cpp @@ -73,9 +73,7 @@ App::App(int &argc, char **argv) : QApplication(argc, argv) #if defined(Q_OS_WIN32) || defined(Q_OS_MAC) QIcon::setThemeName(APP_NAME); #endif // Q_OS_WIN32 || Q_OS_MAC -#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) QIcon::setFallbackThemeName(APP_NAME); -#endif // QT 5.12 _gui = new GUI(); diff --git a/src/GUI/graphview.cpp b/src/GUI/graphview.cpp index 063c6de8..c29086e1 100644 --- a/src/GUI/graphview.cpp +++ b/src/GUI/graphview.cpp @@ -25,15 +25,6 @@ #define IW(item) ((item)->boundingRect().width()) #define IH(item) ((item)->boundingRect().height()) -static inline QPoint POS(QWheelEvent *e) -{ -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) - return e->pos(); -#else // QT 5.15 - return e->position().toPoint(); -#endif // QT 5.15 -} - static inline QPoint POS(QMouseEvent *e) { #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) @@ -393,7 +384,7 @@ void GraphView::wheelEvent(QWheelEvent *e) return; _angleDelta = _angleDelta % (15 * 8); - QPointF pos = mapToScene(POS(e)); + QPointF pos = mapToScene(e->position().toPoint()); QRectF gr(_grid->boundingRect()); QPointF r(pos.x() / gr.width(), pos.y() / gr.height()); @@ -404,7 +395,8 @@ void GraphView::wheelEvent(QWheelEvent *e) QPointF npos(mapFromScene(QPointF(r.x() * ngr.width(), r.y() * ngr.height()))); QScrollBar *sb = horizontalScrollBar(); - sb->setSliderPosition(sb->sliderPosition() + npos.x() - POS(e).x()); + sb->setSliderPosition(sb->sliderPosition() + npos.x() + - e->position().toPoint().x()); QGraphicsView::wheelEvent(e); } diff --git a/src/GUI/gui.cpp b/src/GUI/gui.cpp index b237016b..52bba0d5 100644 --- a/src/GUI/gui.cpp +++ b/src/GUI/gui.cpp @@ -2498,12 +2498,8 @@ QGeoPositionInfoSource *GUI::positionSource(const Options &options) { QGeoPositionInfoSource *source; -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) - source = QGeoPositionInfoSource::createSource(options.plugin, this); -#else // QT 5.14 source = QGeoPositionInfoSource::createSource(options.plugin, options.pluginParams.value(options.plugin), this); -#endif // QT 5.14 if (source) source->setPreferredPositioningMethods( QGeoPositionInfoSource::SatellitePositioningMethods); diff --git a/src/GUI/mapview.cpp b/src/GUI/mapview.cpp index e6b278eb..d139403c 100644 --- a/src/GUI/mapview.cpp +++ b/src/GUI/mapview.cpp @@ -638,11 +638,7 @@ void MapView::wheelEvent(QWheelEvent *event) return; _wheelDelta = _wheelDelta % (15 * 8); -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) - zoom((delta > 0) ? 1 : -1, event->pos(), shift); -#else // QT 5.15 zoom((delta > 0) ? 1 : -1, event->position().toPoint(), shift); -#endif // QT 5.15 /* Do not call QGraphicsView::wheelEvent() here as this would shift the view ! */ diff --git a/src/GUI/optionsdialog.cpp b/src/GUI/optionsdialog.cpp index 86ec4e95..d9c4103f 100644 --- a/src/GUI/optionsdialog.cpp +++ b/src/GUI/optionsdialog.cpp @@ -676,21 +676,17 @@ QWidget *OptionsDialog::createPositionPage() _positionPlugin = new QComboBox(); _positionPlugin->addItems(plugins); _positionPlugin->setCurrentIndex(_positionPlugin->findText(_options.plugin)); -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) _pluginParameters = new PluginParameters(_positionPlugin->currentText(), _options.pluginParams); connect(_positionPlugin, &QComboBox::currentTextChanged, _pluginParameters, &PluginParameters::setPlugin); -#endif // QT 5.14 QFormLayout *pluginLayout = new QFormLayout(); pluginLayout->addRow(tr("Plugin:"), _positionPlugin); QVBoxLayout *sourceLayout = new QVBoxLayout(); sourceLayout->addLayout(pluginLayout); -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) sourceLayout->addWidget(_pluginParameters); -#endif // QT 5.14 sourceLayout->addStretch(); QWidget *sourceTab = new QWidget(); @@ -1009,9 +1005,7 @@ void OptionsDialog::accept() _options.hillshadingZFactor = _hillshadingZFactor->value(); _options.plugin = _positionPlugin->currentText(); -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) _options.pluginParams = _pluginParameters->parameters(); -#endif // QT 5.14 _options.useOpenGL = _useOpenGL->isChecked(); _options.enableHTTP2 = _enableHTTP2->isChecked(); diff --git a/src/GUI/optionsdialog.h b/src/GUI/optionsdialog.h index 283484ce..cbd7d889 100644 --- a/src/GUI/optionsdialog.h +++ b/src/GUI/optionsdialog.h @@ -193,9 +193,7 @@ private: QDoubleSpinBox *_hillshadingZFactor; // Position QComboBox *_positionPlugin; -#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) PluginParameters *_pluginParameters; -#endif // QT 5.14 // System QSpinBox *_pixmapCache; QSpinBox *_demCache; diff --git a/src/GUI/pathitem.cpp b/src/GUI/pathitem.cpp index d13d5002..646ca6a5 100644 --- a/src/GUI/pathitem.cpp +++ b/src/GUI/pathitem.cpp @@ -10,13 +10,6 @@ #include "markeritem.h" #include "pathitem.h" - -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -#define INTERSECTS intersect -#else // QT 5.15 -#define INTERSECTS intersects -#endif // QT 5.15 - #define GEOGRAPHICAL_MILE 1855.3248 Units PathItem::_units = Metric; @@ -79,14 +72,14 @@ bool PathItem::addSegment(const Coordinates &c1, const Coordinates &c2) QLineF l(QPointF(c1.lon(), c1.lat()), QPointF(c2.lon() + 360, c2.lat())); QLineF dl(QPointF(180, -90), QPointF(180, 90)); - l.INTERSECTS(dl, &p); + l.intersects(dl, &p); _painterPath.lineTo(_map->ll2xy(Coordinates(180, p.y()))); _painterPath.moveTo(_map->ll2xy(Coordinates(-180, p.y()))); } else { QLineF l(QPointF(c1.lon(), c1.lat()), QPointF(c2.lon() - 360, c2.lat())); QLineF dl(QPointF(-180, -90), QPointF(-180, 90)); - l.INTERSECTS(dl, &p); + l.intersects(dl, &p); _painterPath.lineTo(_map->ll2xy(Coordinates(-180, p.y()))); _painterPath.moveTo(_map->ll2xy(Coordinates(180, p.y()))); } diff --git a/src/GUI/popup.cpp b/src/GUI/popup.cpp index 5a1a0ea3..84f98409 100644 --- a/src/GUI/popup.cpp +++ b/src/GUI/popup.cpp @@ -9,9 +9,6 @@ #include #include #include -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -#include -#endif // QT 5.15 #include "tooltip.h" #include "thumbnail.h" #include "flowlayout.h" @@ -184,11 +181,7 @@ bool PopupFrame::eventFilter(QObject *o, QEvent *ev) void PopupFrame::place(const QPoint &pos, QWidget *w) { -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) - QRect screen = QApplication::desktop()->screenGeometry(w); -#else // QT 5.15 QRect screen = w->screen()->geometry(); -#endif // QT 5.15 QPoint p(pos.x() + 2, pos.y() + 16); if (p.x() + width() > screen.x() + screen.width()) diff --git a/src/data/twonavparser.cpp b/src/data/twonavparser.cpp index 89c6e756..21c4d6c1 100644 --- a/src/data/twonavparser.cpp +++ b/src/data/twonavparser.cpp @@ -2,13 +2,6 @@ #include "map/gcs.h" #include "twonavparser.h" - -#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) -#define SKIP_EMPTY QString::SkipEmptyParts -#else // Qt 5.14 -#define SKIP_EMPTY Qt::SkipEmptyParts -#endif - static double lon(const QString &str) { QStringList l(str.split(QChar(0xBA))); @@ -123,7 +116,8 @@ bool TwoNavParser::parse(QFile *file, QList &tracks, }} break; case 'T': - {QStringList list(codec.toString(line).split(' ', SKIP_EMPTY)); + {QStringList list(codec.toString(line).split(' ', + Qt::SkipEmptyParts)); if (list.size() < 4) { _errorString = "Parse error"; return false; @@ -159,7 +153,8 @@ bool TwoNavParser::parse(QFile *file, QList &tracks, tracks.last().last().append(t);} break; case 'W': - {QStringList list(codec.toString(line).split(' ', SKIP_EMPTY)); + {QStringList list(codec.toString(line).split(' ', + Qt::SkipEmptyParts)); if (list.size() < 5) { _errorString = "Parse error"; return false; diff --git a/src/map/downloader.cpp b/src/map/downloader.cpp index 64c13415..dd06ee71 100644 --- a/src/map/downloader.cpp +++ b/src/map/downloader.cpp @@ -27,14 +27,6 @@ #define MAX_REDIRECT_LEVEL 5 #define RETRIES 3 - -#define ATTR_REDIRECT_POLICY QNetworkRequest::RedirectPolicyAttribute -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -#define ATTR_HTTP2_ALLOWED QNetworkRequest::HTTP2AllowedAttribute -#else // QT 5.15 -#define ATTR_HTTP2_ALLOWED QNetworkRequest::Http2AllowedAttribute -#endif // QT 5.15 - #define TMP_SUFFIX ".download" // QNetworkReply::errorString() returns bullshit, use our own reporting @@ -129,31 +121,6 @@ Authorization::Authorization(const QString &username, const QString &password) _header = HTTPHeader("Authorization", "Basic " + data); } -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -NetworkTimeout::NetworkTimeout(int timeout, QNetworkReply *reply) - : QObject(reply), _timeout(timeout) -{ - connect(reply, &QIODevice::readyRead, this, &NetworkTimeout::reset); - _timer.start(timeout * 1000, this); -} - -void NetworkTimeout::reset() -{ - _timer.start(_timeout * 1000, this); -} - -void NetworkTimeout::timerEvent(QTimerEvent *ev) -{ - if (!_timer.isActive() || ev->timerId() != _timer.timerId()) - return; - QNetworkReply *reply = static_cast(parent()); - if (reply->isRunning()) - reply->abort(); - _timer.stop(); -} -#endif // QT 5.15 - - QNetworkAccessManager *Downloader::_manager = 0; int Downloader::_timeout = 30; bool Downloader::_http2 = true; @@ -176,12 +143,10 @@ bool Downloader::doDownload(const Download &dl, const QList &headers QNetworkRequest request(url); request.setMaximumRedirectsAllowed(MAX_REDIRECT_LEVEL); - request.setAttribute(ATTR_REDIRECT_POLICY, + request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); - request.setAttribute(ATTR_HTTP2_ALLOWED, QVariant(_http2)); -#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + request.setAttribute(QNetworkRequest::Http2AllowedAttribute, QVariant(_http2)); request.setTransferTimeout(_timeout * 1000); -#endif // QT 5.15 for (int i = 0; i < headers.size(); i++) { const HTTPHeader &hdr = headers.at(i); @@ -208,9 +173,6 @@ bool Downloader::doDownload(const Download &dl, const QList &headers _currentDownloads.insert(url, file); if (reply->isRunning()) { -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) - new NetworkTimeout(_timeout, reply); -#endif // QT 5.15 connect(reply, &QIODevice::readyRead, this, &Downloader::emitReadReady); connect(reply, &QNetworkReply::finished, this, &Downloader::emitFinished); } else { diff --git a/src/map/downloader.h b/src/map/downloader.h index dd8a49d0..02ee2a8e 100644 --- a/src/map/downloader.h +++ b/src/map/downloader.h @@ -3,9 +3,6 @@ #include #include -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -#include -#endif // QT 5.15 #include #include #include @@ -41,25 +38,6 @@ private: HTTPHeader _header; }; -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -class NetworkTimeout : public QObject -{ - Q_OBJECT - -public: - NetworkTimeout(int timeout, QNetworkReply *reply); - -private slots: - void reset(); - -private: - void timerEvent(QTimerEvent *ev); - - QBasicTimer _timer; - int _timeout; -}; -#endif // QT 5.15 - class Downloader : public QObject { Q_OBJECT diff --git a/src/map/mapsforge/rastertile.cpp b/src/map/mapsforge/rastertile.cpp index 5ed23625..fb72e8c4 100644 --- a/src/map/mapsforge/rastertile.cpp +++ b/src/map/mapsforge/rastertile.cpp @@ -39,9 +39,7 @@ static QPainterPath parallelPath(const QPainterPath &p, double dy) QVector u(n); QPainterPath h; -#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0) h.reserve(p.elementCount()); -#endif // QT 5.13 for (int k = 0; k < n; k++) { qreal c = p.elementAt(k + 1).x - p.elementAt(k).x; @@ -251,12 +249,10 @@ QPainterPath RasterTile::painterPath(const Polygon &polygon, bool curve) const QPainterPath path; if (curve) { -#if QT_VERSION >= QT_VERSION_CHECK(5, 13, 0) int size = 0; for (int i = 0; i < polygon.size(); i++) size += polygon.at(i).size(); path.reserve(size); -#endif // QT 5.13 for (int i = 0; i < polygon.size(); i++) { const QVector &subpath = polygon.at(i); diff --git a/src/map/textpathitem.cpp b/src/map/textpathitem.cpp index 55866117..9b4afa9d 100644 --- a/src/map/textpathitem.cpp +++ b/src/map/textpathitem.cpp @@ -6,16 +6,8 @@ #define MAX_ANGLE 30 #define PADDING 2 -#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) -#define INTERSECTS intersect -#else // QT 5.15 -#define INTERSECTS intersects -#endif // QT 5.15 - - static void swap(const QLineF &line, QPointF *p1, QPointF *p2) { - QPointF lp1(line.p1()); QPointF lp2(line.p2()); @@ -34,10 +26,10 @@ static bool intersection(const QLineF &line, const QRectF &rect, QPointF *p1, { QPointF *p = p1; - if (line.INTERSECTS(QLineF(rect.topLeft(), rect.topRight()), p) + if (line.intersects(QLineF(rect.topLeft(), rect.topRight()), p) == QLineF::BoundedIntersection) p = p2; - if (line.INTERSECTS(QLineF(rect.topLeft(), rect.bottomLeft()), p) + if (line.intersects(QLineF(rect.topLeft(), rect.bottomLeft()), p) == QLineF::BoundedIntersection) { if (p == p2) { swap(line, p1, p2); @@ -45,7 +37,7 @@ static bool intersection(const QLineF &line, const QRectF &rect, QPointF *p1, } p = p2; } - if (line.INTERSECTS(QLineF(rect.bottomRight(), rect.bottomLeft()), p) + if (line.intersects(QLineF(rect.bottomRight(), rect.bottomLeft()), p) == QLineF::BoundedIntersection) { if (p == p2) { swap(line, p1, p2); @@ -53,7 +45,7 @@ static bool intersection(const QLineF &line, const QRectF &rect, QPointF *p1, } p = p2; } - if (line.INTERSECTS(QLineF(rect.bottomRight(), rect.topRight()), p) + if (line.intersects(QLineF(rect.bottomRight(), rect.topRight()), p) == QLineF::BoundedIntersection) { if (p == p2) { swap(line, p1, p2); @@ -68,16 +60,16 @@ static bool intersection(const QLineF &line, const QRectF &rect, QPointF *p1, static bool intersection(const QLineF &line, const QRectF &rect, QPointF *p) { - if (line.INTERSECTS(QLineF(rect.topLeft(), rect.topRight()), p) + if (line.intersects(QLineF(rect.topLeft(), rect.topRight()), p) == QLineF::BoundedIntersection) return true; - if (line.INTERSECTS(QLineF(rect.topLeft(), rect.bottomLeft()), p) + if (line.intersects(QLineF(rect.topLeft(), rect.bottomLeft()), p) == QLineF::BoundedIntersection) return true; - if (line.INTERSECTS(QLineF(rect.bottomRight(), rect.bottomLeft()), p) + if (line.intersects(QLineF(rect.bottomRight(), rect.bottomLeft()), p) == QLineF::BoundedIntersection) return true; - if (line.INTERSECTS(QLineF(rect.bottomRight(), rect.topRight()), p) + if (line.intersects(QLineF(rect.bottomRight(), rect.topRight()), p) == QLineF::BoundedIntersection) return true;