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.