Флаг компиляции QT_DISABLE_DEPRECATED_BEFORE=0x060000 в Qt

Автор: | 15 июня, 2025

Что это за флаг?

QT_DISABLE_DEPRECATED_BEFORE — это предпроцессорный флаг, позволяющий отключать устаревшие API Qt, объявленные до определённой версии. Он активно используется при подготовке проектов к переходу на новую версию Qt (например, с Qt 5 на Qt 6).

Пример использования:

#define QT_DISABLE_DEPRECATED_BEFORE 0x060000

Этот флаг отключает доступ к API, помеченному как устаревший (deprecated) до версии 6.0.0.


Зачем он нужен?

  1. Обнаружить устаревшие участки кода заранее.
  2. Подготовить проект к миграции на новую версию Qt.
  3. Избежать зависимости от API, которые будут удалены в следующем релизе.
  4. Сделать код чище, надёжнее и проще поддерживать.

Как работает флаг?

В 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.00x050000
5.12.00x050C00
5.15.00x050F00
6.0.00x060000
6.2.00x060200
6.5.00x060500

Лучшие практики

  • На 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Позволяет заранее выявить несовместимый код
✅ Убирает технический долгИзбавляет от устаревших конструкций
✅ Повышает стабильностьКод становится предсказуемым и соответствующим текущей документации