嵌入式 Qt/Qml 屏幕旋转(横屏,竖屏)问题的解决

嵌入式 Linux 的一个小屏幕,正常是竖屏模式,可是我们产品中需要横着使用。

Qml 代码已经写好了,在 PC 正常工作。然后移植到嵌入式 Linux,问题来了,屏幕方向不对,显示不正常。

那就去网上找方法吧。

不可行方案

    方案一:
export QT_QPA_EGLFS_ROTATION=90

没有任何效果。

    方案二:
export QT_QPA_ROTATION=linuxfb:rotation=90

结果显示是旋转过来了,但是点击(触摸屏)没有效果。应该是 input 的坐标系并没有改变。

    方案三:

没有办法,底层解决不了,只能上层应用层来解决了。所以想看看 Qt 有没有 API 可以调整屏幕方向。各种找,没有。虽然官方说 Android 平台可以在 AndroidManifest 指定屏幕方向,但是 Linux 平台没有任何说法。

于是各种怀疑触摸处理的问题,怀疑 TapHandler 问题,尝试换成 MouseArea,都没有效果。

终于,我们还是觉得这太复杂了,应该是旋转导致了点击失效。

可行方案

最终是可行方案出场了。

窗口旋转是不考虑了,把长、宽换一下。也就是我们要把一个横着的 Qml 页面,调整到竖着的方向。然后屏幕物理方向旋转,就看起来正常。

一开始是左边这样的,当然,屏幕外面是看不到的。然后将 Qml 根节点旋转+平移,变成右边这样的。

然后屏幕物理转一下,是不是就正常了。

实现方法

说了这么多,怎么实现呢?

首先,把长、宽换一下,这里 root 的长宽是期望(横屏时)的尺寸:

最后将变换增加到 root item 中,就完成了:

(new MyTransform(size))->appendToItem(root);
经验分享 程序员 微信小程序 职场和发展