Qt5:错误:“WA_LockPortraitOrientation”不是“Qt”的成员

Posted

技术标签:

【中文标题】Qt5:错误:“WA_LockPortraitOrientation”不是“Qt”的成员【英文标题】:Qt5: error: 'WA_LockPortraitOrientation' is not a member of 'Qt' 【发布时间】:2014-01-10 22:36:07 【问题描述】:

我正在尝试将 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'

【问题讨论】:

【参考方案1】:

是的,正如您自己所说,这些已在 Qt 5 中删除。

原因是这些只是 Symbian 独有的功能,如果 Qt 用户只在某个平台上工作,这些东西只会让 Qt 用户感到困惑,特别是如果 Qt 5 本身不支持该平台。

相应的gerrit变化可以在这里找到:

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

它比硬编码十六进制值更干净、更好。也是existing Qt modules follow的推荐方式,如QtSerialPort。

【讨论】:

【参考方案2】:

我通过更改这些行来修复它:

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

【讨论】:

以上是关于Qt5:错误:“WA_LockPortraitOrientation”不是“Qt”的成员的主要内容,如果未能解决你的问题,请参考以下文章

libmediainfo:qt5 项目未定义符号错误

发生 qt5 错误 Poppler::Document* 文档

Qt5 MYSQL驱动未加载错误

Qt5.15.0 升级至 Qt5.15.9 遇到的一些错误

带有 Qt5 执行错误的 OpenSplice 创建失败:句柄无效

Qt5发布错误01