Что это за флаг?
QT_DISABLE_DEPRECATED_BEFORE — это предпроцессорный флаг, позволяющий отключать устаревшие API Qt, объявленные до определённой версии. Он активно используется при подготовке проектов к переходу на новую версию Qt (например, с Qt 5 на Qt 6).
Пример использования:
#define QT_DISABLE_DEPRECATED_BEFORE 0x060000
Этот флаг отключает доступ к API, помеченному как устаревший (deprecated) до версии 6.0.0.
Зачем он нужен?
- Обнаружить устаревшие участки кода заранее.
- Подготовить проект к миграции на новую версию Qt.
- Избежать зависимости от API, которые будут удалены в следующем релизе.
- Сделать код чище, надёжнее и проще поддерживать.
Как работает флаг?
В Qt большое количество функций, классов и методов помечается как Q_DECL_DEPRECATED — это значит, что они устарели, но пока доступны. Когда вы используете такой флаг, Qt удаляет эти объявления из заголовков, и компилятор выдаст ошибку при попытке их использовать.
Пример использования
1. В main.cpp (или до подключения любых заголовков Qt):
#define QT_DISABLE_DEPRECATED_BEFORE 0x060000 #include <QtWidgets>
2. В CMakeLists.txt:
add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0x060000)
Пример: как помогает найти устаревший API
Устаревший код:
QString s = "test"; QByteArray arr = s.toAscii(); // toAscii устарел
Результат с флагом:
error: ‘toAscii’ is not a member of ‘QString’
Вариант замены:
QByteArray arr = s.toLatin1();
Таблица версий и соответствующих чисел
| Версия Qt | Значение QT_DISABLE_DEPRECATED_BEFORE |
|---|---|
| 5.0.0 | 0x050000 |
| 5.12.0 | 0x050C00 |
| 5.15.0 | 0x050F00 |
| 6.0.0 | 0x060000 |
| 6.2.0 | 0x060200 |
| 6.5.0 | 0x060500 |
Лучшие практики
- На Qt 5.x используйте
QT_DISABLE_DEPRECATED_BEFORE=0x050F00(или новее), чтобы убрать API, устаревшие к версии 5.15. - Перед миграцией на Qt 6 используйте
QT_DISABLE_DEPRECATED_BEFORE=0x060000, чтобы проверить совместимость и устранить deprecated-использования. - Для новых проектов на Qt 6 рекомендуется сразу включить флаг на уровне
0x060000или выше — это позволит писать «чистый» код.
Что важно помнить?
- Этот флаг не удаляет поддержку API в самой Qt — он лишь запрещает вам использовать их во время компиляции проекта.
- Не все устаревшие API могут быть помечены в документации. Иногда помогает только попытка компиляции.
- Этот флаг особенно полезен в больших командах: он позволяет унифицировать и стандартизировать подход к отказу от устаревшего кода.
Как комбинировать с другими флагами?
Вы можете использовать QT_DEPRECATED_WARNINGS или QT_DEPRECATED_WARNINGS_SINCE, чтобы не блокировать сборку, но получать предупреждения:
#define QT_DEPRECATED_WARNINGS #define QT_DEPRECATED_WARNINGS_SINCE 0x060000
Заключение
QT_DISABLE_DEPRECATED_BEFORE=0x060000 — это мощный инструмент контроля качества, позволяющий своевременно обнаруживать и устранять устаревшие вызовы, чтобы сделать проект более надёжным и готовым к будущим релизам Qt.
| Плюс | Описание |
|---|---|
| ✅ Упрощает миграцию на Qt 6 | Позволяет заранее выявить несовместимый код |
| ✅ Убирает технический долг | Избавляет от устаревших конструкций |
| ✅ Повышает стабильность | Код становится предсказуемым и соответствующим текущей документации |
