Qt5: ошибка: 'WA_LockPortraitOrientation' не является членом 'Qt'

Я пытаюсь скомпилировать проект Qt4/Symbian в Qt5, сохраняя при этом поддержку Qt4/Symbian.

В настоящее время MainWindow::setOrientation автоматически генерируемая функция шаблона доставляет мне неприятности.

Это дает мне эти ошибки компилятора:

error: 'WA_LockPortraitOrientation' is not a member of 'Qt'
error: 'WA_LockLandscapeOrientation' is not a member of 'Qt'
error: 'WA_AutoOrientation' is not a member of 'Qt'

2 ответа

Решение

Да, они были удалены в Qt 5, как вы сами отметили.

Причина в том, что это функции только для Symbian, и такие вещи просто смущают пользователей Qt, если они работают только на определенной платформе, особенно если эта платформа даже не поддерживается Qt 5 по своей сути.

Соответствующее изменение геррита можно найти здесь:

https://codereview.qt-project.org/

Вам нужно изменить эти строки

#if QT_VERSION < 0x040702
    // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes

к этим:

#if (QT_VERSION < QT_VERSION_CHECK(4, 7, 2)) || (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
    // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
    // Qt 5 has removed them.

Хороший способ условно разрешить определенные функции на основе версии Qt был бы следующим:

#if (QT_VERSION < QT_VERSION_CHECK(4, 7, 2)) || (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
...
#endif

Это чище и приятнее, чем жестко закодированные шестнадцатеричные значения. Это также рекомендуемый путь, которым следуют существующие модули Qt, такие как QtSerialPort.

Я исправил это, изменив эти строки:

#if QT_VERSION < 0x040702
    // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes

к этим:

#if (QT_VERSION < QT_VERSION_CHECK(4, 7, 2)) || (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
    // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
    // Qt 5 has removed them.
Другие вопросы по тегам