Qt for Android 开发大坑
Qt for Android 开发大坑
作者: qyvlik
Qt 5.5.1
这里说一说比較常见的 Qt 开发安卓的大坑。
希望同学们不要做无谓的挣扎,跳过这些坑。
输入框
首当其冲的是输入框,Qt 的输入在安卓上表现不佳.
无法支持安卓原生的输入法訪问 Qt 的输入框。就是安卓输入法无法复制,粘贴,剪切 Qt 输入框中的文本。
无法支持使用触摸的方式选中 Qt 输入框中的文字。
假设输入框的位置处于应用底部,相似于 IM 那种聊天工具,应当注意。
a. 假设应用
Activity设置为android:windowSoftInputMode="adjustResize",弹出输入法时。应用界面就会进行缩放。这个时候。应用界面就会闪烁。b. 假设应用
Activity设置为android:windowSoftInputMode="adjustPan",应用界面的头部就会被顶出屏幕。为了修复上诉的问题,參照例如以下步骤
a. 先设置应用
Activity设置为android:windowSoftInputMode="adjustPan",这样。弹出输入法时,就不由于界面缩放而闪烁。b. 获取到安卓输入法高度。
c. 改动输入框,使其被点击获取焦点之前,先弹出输入法(
Qt.inputMethod.show()),由于不是输入框获取焦点而弹出输入发。所以界面既不会闪烁,也不会相对屏幕向上位移。(就是在TextField上放一个MouseArea)d. 在输入法弹出后,就能够获取键盘高度(假设在安卓上获取键盘高度,是须要写一些 Java 代码的)。
e. 获取到键盘高度后,直接位移输入框(延时处理),然后
forceActiveFocus强制获取焦点。上诉解决方式又引发一个问题,且听我细细道来。
a. 首先
Qt.inputMethod.show()在安卓上能够直接显示键盘。然后显示时不会直接缩放界面(造成闪烁)或者将界面顶出屏幕。b. 接着,输入框是一个特殊的控件。在输入框获取虚拟键的焦点后。安卓上的输入法会直接记住这个控件的位置。
c. 再下一次直接调用
Qt.inputMethod.show()时。会找到上一次获取焦点的输入框的位置,依据这个位置,弹出虚拟键破并将界面顶出屏幕。然后输入框才会拿到键盘高度。位移。为了再解决上诉的问题。还得记录下安卓上键盘的高度,然后依据键盘高度决定先使用
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 编译支持最好。Chromium 对 MinGW 的支持基本是没有的。
如今 Qt 在手机设备上,使用 QtWebView 也就是在 QtSurface 上绘制原生网页作为 Qt 在移动端上网页的解决方式。
本地化地图
QtQuick 中是支持地图插件的。可是官方仅仅是预制了 here 等几个国外的地图插件。百度地图仅仅能自己去封装插件。
Qt for Android 开发大坑的更多相关文章
- Qt for Android 开发大坑123
http://blog.csdn.net/qyvlik/article/details/50989685 http://blog.csdn.net/qyvlik/article/details/515 ...
- Qt for Android开发环境搭建及测试过程记录
最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...
- Qt For Android 开发环境配置
想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt ...
- Qt for Android开发Android应用时的各种错误汇总(此片博文不成熟,请大家略过)
“Qt for Android真的很脆弱,项目能跑起来靠的是奇迹,跑不起来,各种报错才是正常...” 问题一:Qt for Android编译不过:make (e=2): 系统找不到指定的文件. 之前 ...
- Qt for Android开发入门
1. Qt for Android环境搭建 1.1 打包需要的工具 1.2 JDK安装 如果之前配置过,就可以跳过这一步. 下载java jdk 64:java jdk 1.8 x64 ...
- QT on Android开发
1.安装QT 2.安装JDK 配置如下系统环境变量: JAVA_HOME D:\Java\jdk Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin CLASSPATH ...
- Qt for Android开发总结
近段时间,本人使用Qt5.3.0开发了Android应用,由于官方资料较少,在此记录开发过程遇到的问题及解决方法 1.Android平台的视频播放,只能使用qml的MediaPlayer 2.qml中 ...
- Android开发 大坑Fragment
是不是弄了半天你的Fragment老是Replace不了,我的原因是:弄成静 态的,然后要动态Replace,竟然不行,后来框个FragmentLayout,改成全动态添加和Replace,OK了.
- QT 5.1.1 for Android 开发环境搭建与配置【Windows 7】
前言:本人操作系统为Windows7 64位,用的是32位的安装包,32位系统没有验证. 一.首先下载以下安装包,如果提供的链接失效请自行下载: (1) Android SDK (Windows 32 ...
随机推荐
- 最近升级mysql5.7出现下面问题,ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by
执行sql: SELECT * FROM `user_link` WHERE `group_id` IN ('78', '79') GROUP BY `link_id` 报错: SQLSTATE[42 ...
- 【深度搜索+剪枝】POJ1011-Sticks
深搜部分和之前的POJ2362差不多,只是有几处需要额外的剪枝. [思路]排序后从最短木棒开始搜索至木棒长总和,如果木棒长总和sum能整除当前棒长,则进入深搜. [剪枝]先前POJ2362的剪枝部分不 ...
- python3-开发进阶Django中序列化以及rest_framework的序列化
一.django框架的序列化 直接上代码 1.这是app下的models.py from django.db import models # Create your models here. clas ...
- hdu 5236 Article 概率dp
Article Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5236 ...
- spring boot application.properties乱码问题
1. 在application.properties 中增加 spring.http.encoding.force=true spring.http.encoding.charset=UTF- spr ...
- [典型漏洞分享]一个典型的软件漏洞--memcpy导致的缓冲区溢出
YS VTM模块存在缓冲区溢出漏洞,可导致VTM进程异常退出[高] 问题描述: YS VTM模块开放对外监听端口(8554和8664),并从外部接收网络数据,中间模块调用到memcpy函数对网络数据进 ...
- eval命令的使用
eval : 将参数组合为一个新的命令,然后交给Shell执行.读取一连串的参数,并依参数本身的内容来执行命令.常用来处理Shell脚本中的变量,参数不限数目,参数用分号";&quo ...
- rocketmq持久化方式
推荐看下RocketMQ,使用文件做持久化, 并支持分布式事务(虽然可能造成较多的写脏), 异步刷盘,内存预分配, 高可用采用了同步双写及异步复制的方式, 通信是用netty做的,基本上所有耗时的操作 ...
- vc2005(visual studio)使用习惯记录
来源:http://blog.csdn.net/zdl1016/article/details/6184549 前言:sourceinsight不支持显示utf-8的文件, 实在是一大遗憾!vim现在 ...
- ISP图像调试工程师——自动曝光(熟悉3A算法)
基于图像的自动曝光算法研究 : https://wenku.baidu.com/view/c854fa93fd0a79563c1e72ba.html