暂时,以编程方式禁用 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(因为您想在运行时这样做)。我在我的一个项目中为此编写了一个小型包装类,以便在 android 和 ios 上执行此操作。 可能相关: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 保持在屏幕底部?