暂时,以编程方式禁用 Qt 中的屏幕旋转

Posted

技术标签:

【中文标题】暂时,以编程方式禁用 Qt 中的屏幕旋转【英文标题】:Temporarily, programmatically disable screen rotation in Qt 【发布时间】:2015-12-16 11:05:05 【问题描述】:

请注意:这个问题是关于 Qt C++ 框架,而不是普通的 Java API。在Java中,这个问题has already been answered。

在我的应用程序的主菜单中,我真的不想担心不同类型的屏幕旋转。我想禁用屏幕旋转,直到用户转到屏幕旋转有意义的其他视图。对于主菜单,我只想使用纵向视图。

如何做到这一点?如何控制应用屏幕旋转?

【问题讨论】:

如果我没记错的话(即,它是在最近半年左右添加到 Qt 中的),您需要为此使用本机 API(因为您想在运行时这样做)。我在我的一个项目中为此编写了一个小型包装类,以便在 androidios 上执行此操作。 可能相关:Landscape mode in Qt-Android application @pasbi 不是真的,早在 2015 年我问这个问题时,就已经知道永久横向模式的解决方案了。但是这个问题是关于暂时将模式更改为横向的,例如如果您想在屏幕上播放视频。 @TomášZato hm... 我正在尝试将屏幕永久锁定为横向,我面临的问题与链接的问题/答案中描述的完全相同。我也会对这里描述的动态解决方案感到满意。所以我想从这个角度来看它们是相关的(但肯定不是重复的)。 【参考方案1】:

您可以使用

设置方向
QAndroidJniObject activity = QtAndroid::androidActivity();
activity.callMethod<void>("setRequestedOrientation", "(I)V", orientation);

其中方向是代表方向的int。您可以复制the codes provided in the documentation(例如,0 锁定横向,1 锁定纵向,-1 解锁任何旋转),但我建议使用,例如,

QAndroidJniObject::getStaticField<int>("android.content.pm.ActivityInfo", "SCREEN_ORIENTATION_LANDSCAPE");

获取代码值。

此答案基于https://***.com/a/38947312/4248972。不同的是,这个答案还解释了如何再次解锁旋转,并提供了一个示例来展示如何在不手动复制的情况下获取方向代码。

【讨论】:

以上是关于暂时,以编程方式禁用 Qt 中的屏幕旋转的主要内容,如果未能解决你的问题,请参考以下文章

反应本机禁用自动旋转[重复]

iOS 上的 LibGDX:使用 Robovm 以编程方式旋转屏幕

如何在设备旋转后以编程方式创建的 UIButtons 保持在屏幕底部?

启动后禁用屏幕旋转? [复制]

如何从 android SERVICE 禁用/启用屏幕旋转?

如何禁用屏幕旋转(react-native)?