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'

4

Решение

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

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

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

https://codereview.qt-project.org/#change,11280

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

#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.

5

Другие решения

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

#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.
2

По вопросам рекламы [email protected]