Qt for Android 開發大坑

來源:互聯網
上載者:User

標籤:

Qt for Android 開發大坑

作者: qyvlik

Qt 5.5.1

這裡說一說比較常見的 Qt 開發安卓的大坑。希望同學們不要做無謂的掙紮,跳過這些坑。

輸入框

首當其衝的是輸入框,Qt 的輸入在安卓上表現不佳.

  1. 無法支援安卓原生的IME訪問 Qt 的輸入框,就是安卓IME無法複製,粘貼,剪下 Qt 輸入框中的文本。

  2. 無法支援使用觸摸的方式選中 Qt 輸入框中的文字。

  3. 如果輸入框的位置處於應用底部,類似於 IM 那種聊天工具,應當注意。

    a. 如果應用 Activity 設定為 android:windowSoftInputMode="adjustResize",彈出IME時,應用介面就會進行縮放,這個時候,應用介面就會閃爍。

    b. 如果應用 Activity 設定為 android:windowSoftInputMode="adjustPan",應用介面的頭部就會被頂出螢幕。

  4. 為了修複上訴的問題,參照如下步驟

    a. 先設定應用 Activity 設定為 android:windowSoftInputMode="adjustPan",這樣,彈出IME時,就不因為介面縮放而閃爍。

    b. 擷取到安卓IME高度。

    c. 修改輸入框,使其被點擊擷取焦點之前,先彈出IME(Qt.inputMethod.show()),由於不是輸入框擷取焦點而彈出輸入發,所以介面既不會閃爍,也不會相對螢幕向上位移。(就是在 TextField 上放一個 MouseArea

    d. 在IME彈出後,就可以擷取鍵盤高度(如果在安卓上擷取鍵盤高度,是需要寫一些 Java 代碼的)。

    e. 擷取到鍵盤高度後,直接位移輸入框(延時處理),然後 forceActiveFocus 強制擷取焦點。

  5. 上訴解決方案又引發一個問題,且聽我細細道來。

    a. 首先 Qt.inputMethod.show() 在安卓上可以直接顯示鍵盤,然後顯示時不會直接縮放介面(造成閃爍)或者將介面頂出螢幕。

    b. 接著,輸入框是一個特殊的控制項,在輸入框擷取虛擬鍵的焦點後,安卓上的IME會直接記住這個控制項的位置。

    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 是基於Google的 Chromium 的,Chromium 現在對 VS 編譯支援最好,而對 MinGW 的支援隨著 VS 開源,也就自然流產了。

現在 Qt 在手機裝置上,使用 QtWebView 也就是在 QtSurface 上繪製原生網頁作為 Qt 在移動端上網頁的解決方案。

本地化地圖

QtQuick 中是支援地圖外掛程式的,但是官方只是預製了 here 等幾個國外的地圖外掛程式,百度地圖只能自己去封裝外掛程式。

相關討論有關 QML QtLocation 的 Plugin 的使用問題。

Qt for Android 開發大坑

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.