9.1 KiB
Qt5 Drop - Cleanup Checklist
Inventory of all Qt5 compatibility code and version branching across the project. Goal: support only Qt6, remove all Qt5 conditionals and dead branches.
1. Build System (.pro / .pri files)
core5compat module additions
These add QT += core5compat for Qt6 builds. Needed by third-party QtWebApp (QTextCodec, QRegExp).
| File | Line | Code |
|---|---|---|
YACReaderLibrary/YACReaderLibrary.pro |
51 | greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat |
YACReader/YACReader.pro |
53 | greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat |
YACReaderLibraryServer/YACReaderLibraryServer.pro |
20 | greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat |
YACReaderLibraryServer/YACReaderLibraryServer.pro |
40 | greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat (duplicate) |
Action: Replace conditionals with unconditional QT += core5compat (still needed for QtWebApp). Remove the duplicate in YACReaderLibraryServer.
macextras module (Qt5-only, removed in Qt6)
| File | Line | Code |
|---|---|---|
YACReaderLibrary/YACReaderLibrary.pro |
44 | lessThan(QT_MAJOR_VERSION, 6): QT += macextras |
YACReader/YACReader.pro |
48 | lessThan(QT_MAJOR_VERSION, 6): QT += macextras |
Action: Remove these lines entirely.
gui-private module (Qt 6.7+)
| File | Line | Code |
|---|---|---|
YACReaderLibrary/YACReaderLibrary.pro |
53-55 | greaterThan(QT_MAJOR_VERSION, 5):greaterThan(QT_MINOR_VERSION, 6) { QT += gui-private } |
YACReader/YACReader.pro |
55-57 | Same |
Action: Simplify to greaterThan(QT_MINOR_VERSION, 6): QT += gui-private (drop the Qt5 guard).
Poppler backend version branching
| File | Lines | What |
|---|---|---|
dependencies/pdf_backend.pri |
60-84 | Qt5 uses poppler-qt5, Qt6 uses poppler-qt6 (pkg-config, include paths, link flags) |
Action: Keep only the Qt6 (poppler-qt6) branch, remove poppler-qt5 paths.
Minimum version check
| File | Lines | What |
|---|---|---|
config.pri |
18-41 | minQtVersion() function, enforces minimum Qt 5.15.0 |
Action: Update minimum to Qt 6.x.
QML resource branching (DONE)
| File | Lines | What |
|---|---|---|
YACReaderLibrary/YACReaderLibrary.pro |
317-321 | Was greaterThan(QT_MAJOR_VERSION, 5) { qml6.qrc } else { qml.qrc } |
Action: Already cleaned up - now unconditional RESOURCES += qml.qrc.
Qt4 compatibility in third-party
| File | Line | Code |
|---|---|---|
third_party/QsLog/QsLog.pri |
11 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets |
Action: Replace with unconditional QT += widgets.
2. C++ Source Code (#if QT_VERSION checks)
Qt5 vs Qt6 API changes (own code)
| File | Line(s) | Qt5 branch | Qt6 branch | API change |
|---|---|---|---|---|
common/pdf_comic.h |
49 | #include "poppler-qt5.h" |
#include <poppler-qt6.h> |
Poppler header |
common/pdf_comic.mm |
3 | (nothing) | #undef __OBJC_BOOL_IS_BOOL |
macOS ObjC compat |
common/comic.cpp |
812 | auto _pdfComic = Poppler::Document::load() |
pdfComic = Poppler::Document::load() |
Poppler return type |
YACReaderLibrary/initial_comic_info_extractor.cpp |
44 | Same Poppler pattern | Same | Poppler return type |
YACReader/mouse_handler.cpp |
22, 56, 107 | QPointF(event->x(), event->y()) |
event->position() |
QMouseEvent API |
YACReader/viewer.cpp |
762 | pixmap(Qt::ReturnByValue) |
pixmap() |
QPixmap return semantics |
custom_widgets/help_about_dialog.cpp |
14, 88 | QTextCodec / setCodec() |
QStringConverter / setEncoding() |
Text encoding API |
YACReader/translator.cpp |
291 | player->setMedia() |
player->setSource() |
QMediaPlayer API |
YACReaderLibrary/comic_vine/comic_vine_dialog.cpp |
149, 160 | QtConcurrent::run(this, &fn, args) |
QtConcurrent::run(&fn, this, args) |
Argument order |
YACReaderLibrary/library_window.cpp |
173 | Different key handling | keySequence[0] (QKeyCombination) |
Key event API |
YACReaderLibrary/library_window.cpp |
790-793 | Qt5 toolbar connections | Qt6 toolbar connections | macOS toolbar |
YACReader/main_window_viewer.cpp |
483, 1357 | Qt5 toolbar/slider | Qt6 toolbar/slider | macOS toolbar |
YACReaderLibrary/trayhandler.mm |
3 | (nothing) | #undef __OBJC_BOOL_IS_BOOL |
macOS ObjC compat |
YACReader/main.cpp |
102 | (nothing) | QImageReader::setAllocationLimit(0) |
Image reader limit |
YACReaderLibraryServer/main.cpp |
53 | (nothing) | QImageReader::setAllocationLimit(0) |
Image reader limit |
Action: For each, keep only the Qt6 branch, remove the #if/#else/#endif and the Qt5 code.
Qt4 vs Qt5 leftovers (very old)
| File | Line(s) | What |
|---|---|---|
custom_widgets/yacreader_table_view.cpp |
31, 39, 46 | #if QT_VERSION >= 0x050000 — setResizeMode vs setSectionResizeMode |
YACReaderLibrary/comic_vine/scraper_tableview.cpp |
9, 16, 23 | Same Qt4 vs Qt5 header API |
YACReader/translator.cpp |
3, 164 | #if QT_VERSION >= 0x050000 — Phonon vs QMediaPlayer |
YACReader/main.cpp |
135 | #if QT_VERSION >= 0x050800 — QCommandLineOption::HiddenFromHelp |
Action: Remove the #if guards entirely, keep only the Qt5+ code (which is also valid Qt6).
Qt 6.7+ specific (RHI widget)
| File | Lines | What |
|---|---|---|
common/rhi/yacreader_flow_rhi.h |
8-302 | #if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) — entire QRhiWidget implementation |
Action: Keep this conditional (gates on Qt 6.7 minor version, not Qt5 vs Qt6).
Qt 6.9+ specific (test code)
| File | Line | What |
|---|---|---|
tests/concurrent_queue_test/concurrent_queue_test.cpp |
212 | #if QT_VERSION < QT_VERSION_CHECK(6, 9, 0) — QDebug for std::array |
Action: Keep this conditional (Qt6 minor version gate).
3. Third-Party Libraries
QtWebApp (third_party/QtWebApp/)
| File | Lines | What |
|---|---|---|
templateengine/templateengine.pri |
5 | QT += core5compat |
templateengine/templateloader.cpp |
13, 77, 86, 107 | QRegExp→QRegularExpression, QString::split flag |
httpserver/httpconnectionhandler.h |
23 | tSocketDescriptor typedef (Qt4 vs Qt5) |
httpserver/httpconnectionhandlerpool.cpp |
152 | SSL cert handling (Qt <5.15 vs 5.15+) |
Action: Decide whether to update QtWebApp or replace it. If updating: remove Qt4/Qt5 branches, keep Qt6 code, potentially drop core5compat dependency by migrating QTextCodec→QStringConverter and QRegExp→QRegularExpression.
QsLog (third_party/QsLog/)
| File | Lines | What |
|---|---|---|
QsLog.pri |
11 | Qt4 widgets guard |
QsLogDestFile.cpp |
32, 157, 179 | QTextCodec vs QStringConverter |
QsLogWindow.cpp |
129 | Qt4 header resize API |
Action: Same approach — remove Qt4/Qt5 branches, keep Qt6 code.
4. CI/CD and Build Scripts
GitHub Actions (.github/workflows/build.yml)
Qt5 build targets to remove:
- Ubuntu Linux Qt5 build (~line 63)
- Windows x64 Qt5 build (~line 346)
- Windows x86 Qt5 build (~line 798)
- macOS Qt5 build (~line 201)
Qt6 build targets to keep (and simplify):
- Linux Qt6 builds (~lines 90, 116)
- macOS Qt6 Universal (~line 145) — still installs
qt5compatmodule (needed for QtWebApp) - Windows x64 Qt6 (~line 408) — same
- Windows ARM64 Qt6 (~line 574) — same
Build scripts
| File | What |
|---|---|
build_scripts/ubuntu_24.04/build.sh |
Qt6 — installs libqt6core5compat6-dev, qml6-module-qt5compat-graphicaleffects |
build_scripts/ubuntu_22.04/build.sh |
Qt5 — entire script is Qt5-only |
Action: Remove ubuntu_22.04 build script. In ubuntu_24.04, remove qml6-module-qt5compat-graphicaleffects (no longer used in QML). Keep libqt6core5compat6-dev (needed for QtWebApp).
Docker
| File | What |
|---|---|
docker/Dockerfile |
Ubuntu x64 Qt6 — installs libqt6core5compat6-dev (build) and libqt6core5compat6 (runtime) |
docker/Dockerfile.aarch64 |
Ubuntu ARM64 Qt5-only build |
Action: Convert Dockerfile.aarch64 to Qt6. Keep core5compat packages in main Dockerfile (QtWebApp). Make sure the conversion is good, there must be other images online that use the arm+qt6 combo, we can search online.
5. Summary
Safe to remove now (no dependencies)
- All
lessThan(QT_MAJOR_VERSION, 6)lines (macextras) - All
#if QT_VERSION >= 0x050000/0x050800guards (Qt4 leftovers) - All Qt5 CI build targets
build_scripts/ubuntu_22.04/(Qt5-only)qml6-module-qt5compat-graphicaleffectsfrom build scripts (QML migration done)
Requires code changes (keep Qt6 branch only)
- ~15
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)blocks in own code - Poppler backend selection in
pdf_backend.pri config.priminimum version bump
Keep as-is (Qt6 minor version gates)
QT_VERSION_CHECK(6, 7, 0)— RHI widgetQT_VERSION_CHECK(6, 9, 0)— test codegui-privatefor Qt 6.7+ (simplify guard only)
Depends on third-party decisions
core5compat— still needed unless QtWebApp and QsLog are updated to drop QTextCodec/QRegExp