Qt for Android 开发大坑

Qt for Android 开发大坑

作者: qyvlik

Qt 5.5.1

这里说一说比较常见的 Qt 开发安卓的大坑。希望同学们不要做无谓的挣扎,跳过这些坑。

输入框

首当其冲的是输入框,Qt 的输入在安卓上表现不佳.

  1. 无法支持安卓原生的输入法访问 Qt 的输入框,就是安卓输入法无法复制,粘贴,剪切 Qt 输入框中的文本。
  2. 无法支持使用触摸的方式选中 Qt 输入框中的文字。
  3. 如果输入框的位置处于应用底部,类似于 IM 那种聊天工具,应当注意。

    a. 如果应用 Activity 设置为 android:windowSoftInputMode="adjustResize",弹出输入法时,应用界面就会进行缩放,这个时候,应用界面就会闪烁。

    b. 如果应用 Activity 设置为 android:windowSoftInputMode="adjustPan",应用界面的头部就会被顶出屏幕。

  4. 为了修复上诉的问题,参照如下步骤

    a. 先设置应用 Activity 设置为 android:windowSoftInputMode="adjustPan",这样,弹出输入法时,就不因为界面缩放而闪烁。

    b. 获取到安卓输入法高度。

    c. 修改输入框,使其被点击获取焦点之前,先弹出输入法(Qt.inputMethod.show()),由于不是输入框获取焦点而弹出输入发,所以界面既不会闪烁,也不会相对屏幕向上位移。(就是在 TextField 上放一个 MouseArea

    d. 在输入法弹出后,就可以获取键盘高度(如果在安卓上获取键盘高度,是需要写一些 Java 代码的)。

    e. 获取到键盘高度后,直接位移输入框(延时处理),然后 forceActiveFocus 强制获取焦点。

  5. 上诉解决方案又引发一个问题,且听我细细道来。

    a. 首先 Qt.inputMethod.show() 在安卓上可以直接显示键盘,然后显示时不会直接缩放界面(造成闪烁)或者将界面顶出屏幕。

    b. 接着,输入框是一个特殊的控件,在输入框获取虚拟键的焦点后,安卓上的输入法会直接记住这个控件的位置。

    c. 再下一次直接调用 Qt.inputMethod.show() 时,会找到上一次获取焦点的输入框的位置,根据这个位置,弹出虚拟键破并将界面顶出屏幕,然后输入框才会拿到键盘高度,位移。

  6. 为了再解决上诉的问题,还得记录下安卓上键盘的高度,然后根据键盘高度决定先使用 Qt.inputMethod.show() 弹出键盘,还是先位移输入框。

    TODO

已经具现化的解决方案GDPURJYFS/WellChat,演示视频安卓修复键盘弹出界面不友善问题修复终版Demo。当然现在这些方案都有各种各样的问题,具体要做的,其实是希望官方修复键盘弹出,界面缩放时闪烁的这个问题。

摄像头

Qt 安卓应用上的摄像头,如果直接使用 QtMultimedia::Camera 可能会出现无法很好对焦的情况,并且各个机型和不同版本系统上表现不一致,华为手机对 Qt 的支持不佳,问题会稍微多一些。

解决方法:

可以直接通过调用系统的摄像软件,具体参照QtAndroid详解(3):startActivity实战Android拍照功能,具体代码 A-week-to-develop-android-app-plan/demos/CallNativeCamera

SplashScreen

启动屏,据多数 Qter 反映,Qt 安卓应用启动时,会显示一个无内容,带有标题和应用 Icon 的黑色画面,无法直接预先显示 SplashScreen。

本地多媒体缩略图

网络资源可以通过现有的 C++ 接口进行优化,缓存。但是本地多媒体缩略图支持,需要自行构建一个好用的。

网页支持

Qt 对移动平台的网页支持,应该是试图通过在 QtSurface 上绘制原生网页进行支持,所以 Qt 的网页支持对于移动平台来说是很孱弱的。然后 QtWebEngine 是基于谷歌的 Chromium 的,Chromium 现在对 VS 编译支持最好,而对 MinGW 的支持随着 VS 开源,也就自然流产了。

现在 Qt 在手机设备上,使用 QtWebView 也就是在 QtSurface 上绘制原生网页作为 Qt 在移动端上网页的解决方案。

本地化地图

QtQuick 中是支持地图插件的,但是官方只是预制了 here 等几个国外的地图插件,百度地图只能自己去封装插件。

相关讨论有关 QML QtLocation 的 Plugin 的使用问题

时间: 2024-08-05 09:56:03

Qt for Android 开发大坑的相关文章

Qt For Android 开发环境配置

想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt 支持 安卓的版本,比如qt-opensource-windows-x86-android-5.6.2. 前言:在Qt的版本更新中,Qt支持的功能越来越多,安装包也越来越大,在Qt5.9出来之前,Qt的每个版本都对应的编译环境,而在Qt5.9后Qt官方将好多编译环境放到了一起,而在这里我要说的是要配置

Android 开发大坑汇总(持续更新)

android开发大坑汇总 1.EditText --> gravity与hint冲突 表现在2.X版本当在EditText设置android:gravity="center"属性后,android:hint会无效. 解决办法:再添加android:ellipsize="start"就会好了. 感觉:很无厘头的大坑,记住吧!要不旧机子就只有显示不出来的份. 2.DatePickerDialog --> 时间超过最大值变为最小时间时显示出错. 解决办法:暂

QT on Android开发

1.安装QT 2.安装JDK 配置如下系统环境变量: JAVA_HOME D:\Java\jdk Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar 在命令行中输入下列命令查看是否安装成功: java -version java javac 3.安装Android SDK 如果包刷新不了,打开目录 C:\WINDOWS\system32\drivers\etc

Qt for Android开发总结

近段时间,本人使用Qt5.3.0开发了Android应用,由于官方资料较少,在此记录开发过程遇到的问题及解决方法 1.Android平台的视频播放,只能使用qml的MediaPlayer 2.qml中控件的路径必须加file://  例如: Image{ source: "file:///mnt/usbhost1/Config/logo.png" } 3.C++与qml中js的方法互调 QQuickView view; view.setSource(QUrl(QStringLitera

Qt for Android 开发的短信程序

http://book.zhulang.com/299065/734548.html http://book.zhulang.com/299065/734549.html http://book.zhulang.com/299065/734550.html http://book.zhulang.com/299065/734551.html http://book.zhulang.com/299065/734552.html http://book.zhulang.com/299065/7345

Qt on Android: Android SDK安装

之前我在 <Windows下Qt 5.2 for Android开发入门>一文中介绍了 Windows 下 Qt on Android 开发环境的搭建,略过了 Android SDK 的安装,实际还是有一些朋友会在这里遇到问题.这里再专门介绍一下 Android SDK 的安装. 版权全部,转载请注明出处:http://blog.csdn.net/foruok Android SDK 能够到这里下载:http://developer.android.com/sdk/index.html . 假

《Qt on Android核心编程》相关资源

有不少朋友反馈在搭建 Qt on Android 开发环境时遇到了问题,诸如 Android SDK 无法下载. jdk 找不到合适的版本.创建 AVD 出错等等.为此我把与<Qt on Android核心编程>一书配套的相关工具和SDK都打包上传到了百度云上,列在这里供大家下载. 需要说明的是,我的Android SDK和相关工具,都是32位的,也都不是最新的.不过,我在 Qt 5.2.0 ,Qt 5.3.0 , Qt 5.3.1 , Qt 5.4.0 都试过,是可用的. Android N

Qt on Android Episode 5(翻译)

原文地址:http://www.kdab.com/qt-android-episode-5/ 我们已经知道了如何搭建 Qt on Android 开发环境,怎样使用 Qt on Android ,有哪些可用的部署策略以及如何为应用签名,是时候继续前进了.这篇文章,我们来讲 JNI .(BogDan 啊,我等你等了好久,当时我写<Qt on Android核心编程>时没等到--) 为什么需要 JNI 因为 Qt 要实现 Android 的所有功能是不现实的.要想使用 Android 系统已经具备

Qt on Android:qrc与assets

使用 Qt 为 Android 开发应用时,有时我们的应用会携带一些资源文件,如 png . jpg 等,也可能有一些配置文件,如 xml 等,这些文件放在哪里呢? 有两种方式: qrc assets 咱们分别来看下. the Qt Resource System qrc , Qt 的资源文件系统,很好用哦.看个图: 图1 qrc 示意图 你放在 qrc 里的文件,如 copy.png ,会被编译到 exe 文件中(Android应用是 libapplication.so ).当你运行应用时,这