亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于QtQuick的跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)關(guān)鍵技術(shù)研究

        2015-05-30 16:26:27鄭純軍賈寧
        軟件工程 2015年4期
        關(guān)鍵詞:移動(dòng)應(yīng)用跨平臺(tái)

        鄭純軍 賈寧

        摘 要:Qt Quick是一項(xiàng)新技術(shù),基于Qt Quick編寫(xiě)的應(yīng)用程序可跨平臺(tái)運(yùn)行,本文描述了Qt Quick的應(yīng)用在移動(dòng)終端的自適應(yīng),QML與C++、Java語(yǔ)言的交互,QML連接數(shù)據(jù)庫(kù)、Http下載與JSON解析技術(shù),并闡述了Qt Quick的移動(dòng)應(yīng)用打包過(guò)程。

        關(guān)鍵詞:Qt Quick;跨平臺(tái);移動(dòng)應(yīng)用;QML

        中圖分類號(hào):TP368.1 文獻(xiàn)標(biāo)識(shí)碼:A

        Abstract:Qt Quick is a new technology,the application can run cross-platform based on Qt Quick.The paper described the adaptive terminal technology of Qt Quick application and described QML how to interact with C ++,Java language,QML how to connect to database.Then the paper introduced the technology of Http download and JSON parsing.The last, the paper described the mobile app packaging process.

        Keywords:Qt Quick;agile;mobile app;QML

        1 引言(Introduction)

        隨著移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展,新的移動(dòng)設(shè)備或可穿戴設(shè)備不斷涌現(xiàn),如智能手表、智能自行車等,使移動(dòng)設(shè)備應(yīng)用軟件的跨平臺(tái)開(kāi)發(fā)成為移動(dòng)互聯(lián)網(wǎng)企業(yè)關(guān)注的熱點(diǎn)。

        目前移動(dòng)應(yīng)用軟件的開(kāi)發(fā)主要有三種模式:本地應(yīng)用、Web應(yīng)用、混合應(yīng)用。本地應(yīng)用可以充分發(fā)揮硬件本身的特性,但不同硬件設(shè)備,不同操作系統(tǒng)所使用的編程語(yǔ)言、開(kāi)發(fā)環(huán)境各不相同,這使得開(kāi)發(fā)的應(yīng)用程序無(wú)法適應(yīng)多個(gè)平臺(tái);Web應(yīng)用雖然可以適應(yīng)多個(gè)硬件平臺(tái),但對(duì)特定硬件的高級(jí)使用表現(xiàn)不佳;混合應(yīng)用將兩者結(jié)合起來(lái),在一定程度上實(shí)現(xiàn)了本地的高級(jí)應(yīng)用與Web應(yīng)用的兼容。但如何實(shí)現(xiàn)開(kāi)發(fā)的應(yīng)用在桌面、移動(dòng)終端、智能設(shè)備上同時(shí)運(yùn)行是移動(dòng)互聯(lián)網(wǎng)開(kāi)發(fā)者關(guān)注的熱點(diǎn)。

        Qt是跨平臺(tái)應(yīng)用和GUI(圖形用戶界面)的開(kāi)發(fā)框架,用戶只需一次編寫(xiě)代碼,便可非常方便的部署在桌面、移動(dòng)設(shè)備與嵌入式系統(tǒng)中運(yùn)行。目前支持的操作系統(tǒng)有Android、BlackBerry、iOS、Linux/X11、Mac OS X、Windows等。Qt面向?qū)ο?,而且很容易擴(kuò)展,是目前非常流行的一種開(kāi)發(fā)工具。而Qt Quick是Qt 4.7中推出的一項(xiàng)新技術(shù),它可輕松地創(chuàng)建供移動(dòng)和嵌入式設(shè)備使用的動(dòng)態(tài)觸摸式界面和輕量級(jí)應(yīng)用程序,它引入了一種陳述性的腳本語(yǔ)言QML,用于動(dòng)態(tài)設(shè)計(jì)和描述GUI,使設(shè)計(jì)過(guò)程快速靈活,易于使用[1],這一技術(shù)的出現(xiàn)為實(shí)現(xiàn)跨平臺(tái)應(yīng)用的開(kāi)發(fā)提供了一個(gè)新的思路。本文將對(duì)Qt Quick的跨平臺(tái)應(yīng)用開(kāi)發(fā)關(guān)鍵技術(shù)做深入的研究與應(yīng)用。

        2 自適應(yīng)UI設(shè)計(jì)(Adaptive UI design)

        交互界面(UI)作為終端與用戶交流的基本形式,改善UI的體現(xiàn)形式是提升人機(jī)交互舒適感的最佳途徑[2]。開(kāi)發(fā)人員經(jīng)常從單一的界面元素或者操作流程出發(fā),設(shè)計(jì)整體應(yīng)用程序的界面特征,用戶對(duì)于此種方式的界面體驗(yàn)往往較為單調(diào)[3],缺少整體美感。此外,跨平臺(tái)的應(yīng)用程序涉及的終端種類較多,為達(dá)到一次編寫(xiě)、處處可用的效果,必須設(shè)計(jì)自適應(yīng)的界面效果,即針對(duì)不同的終端,界面的形式與大小將自動(dòng)變化,從而實(shí)現(xiàn)和諧的比例、視覺(jué)上的對(duì)稱感。

        2.1 適應(yīng)屏幕旋轉(zhuǎn)

        考慮到部分終端存在重力感應(yīng)器,在變換姿勢(shì)時(shí),界面的元素存在正交變換[4],因此在界面設(shè)計(jì)的過(guò)程中,需要對(duì)元素的坐標(biāo)進(jìn)行靈活處理,即坐標(biāo)位置不固定,相對(duì)位置固定。同時(shí)界面的對(duì)稱軸兩側(cè)需要體感平衡,橫縱向均呈現(xiàn)對(duì)稱關(guān)系,除此之外,還需要對(duì)Qt Quick的環(huán)境變量QWS_DISPLAY進(jìn)行設(shè)置。為達(dá)到用戶欣賞界面的平衡感,界面元素的面積和分布要合理,避免布局失衡、局部過(guò)于緊湊而產(chǎn)生的信息遺失感。

        2.2 適應(yīng)屏幕尺寸

        屏幕尺寸的自適應(yīng)是UI設(shè)計(jì)的重要環(huán)節(jié)之一,目前流行的終端尺寸眾多,無(wú)法為全部尺寸的應(yīng)用程序逐一定制界面,界面尺寸的自動(dòng)更新可大量減少界面開(kāi)發(fā)的工作量。在界面設(shè)計(jì)過(guò)程中,首先需要對(duì)界面元素進(jìn)行差異化布局,使具備一定的誘導(dǎo)效率,用戶可明顯感受到次序感和優(yōu)先感。此外,在使用Qt Quick技術(shù)時(shí),對(duì)界面各個(gè)元素進(jìn)行相對(duì)布局,保證每個(gè)元素的縮放比例、相對(duì)位移、像素平移均步調(diào)一致,即界面凝聚成為一個(gè)整體。最終,在對(duì)Qt Quick新建的工程進(jìn)行相關(guān)設(shè)置的基礎(chǔ)上,可實(shí)現(xiàn)對(duì)屏幕尺寸的自適應(yīng)。

        除此之外,界面的中心協(xié)調(diào)度[5]、布局的緊湊程度、節(jié)奏感以及四象限元素的布局形式均對(duì)UI的設(shè)計(jì)產(chǎn)生一定的影響,開(kāi)發(fā)人員需要在維持需求的基礎(chǔ)上,對(duì)界面的美度進(jìn)行分析和評(píng)價(jià),從而提升應(yīng)用程序的美觀性。

        3 跨平臺(tái)交互技術(shù)(Cross platform interactive technology)

        跨平臺(tái)是指編程語(yǔ)言、軟件、硬件設(shè)備可以在多種平臺(tái)上運(yùn)行工作[6],跨平臺(tái)技術(shù)指相關(guān)的編程語(yǔ)言可以實(shí)現(xiàn)源代碼級(jí)別的復(fù)用,即程序一次編寫(xiě),處處編譯運(yùn)行。QML作為Qt Quick技術(shù)中的一種新型的編程語(yǔ)言,可以實(shí)現(xiàn)快速的界面設(shè)計(jì),并提供界面的動(dòng)作響應(yīng)、過(guò)渡動(dòng)畫(huà)效果。

        但是,界面美觀的設(shè)計(jì)并非是程序設(shè)計(jì)成功的唯一檢驗(yàn)形式,人機(jī)交互的設(shè)計(jì)同樣起到?jīng)Q定作用。利用QML實(shí)現(xiàn)的人機(jī)交互主要體現(xiàn)為應(yīng)用層次上,即系統(tǒng)功能和應(yīng)用的層次,與模型有關(guān)的所有數(shù)據(jù)和交互操作都在于此,可以實(shí)現(xiàn)功能上的數(shù)據(jù)傳輸。本文主要針對(duì)常見(jiàn)的交互形式進(jìn)行介紹,在QML的數(shù)據(jù)傳輸過(guò)程中,無(wú)一例外的使用到QtDeclarative模塊,它是專門(mén)為交互而創(chuàng)建的新型模塊。

        3.1 QML與C++交互

        在對(duì)嵌入式設(shè)備、手機(jī)終端等支持Linux/X11、Windows操作系統(tǒng)進(jìn)行開(kāi)發(fā)時(shí),往往需要實(shí)現(xiàn)QML與C++的數(shù)據(jù)傳輸。這種數(shù)據(jù)傳輸可以通過(guò)以下兩種形式實(shí)現(xiàn):QML引用C++對(duì)象和QML、C++方法相互調(diào)用。

        以最常見(jiàn)的第一種形式為例,需要為QML注冊(cè)C++對(duì)象環(huán)境。在C++實(shí)現(xiàn)中,非可視化的型別均為QObject的子類,可視化的類型均為QDeclarativeItem的子類。此時(shí),QDeclarativeItem等同于QML的Item類。

        如果用戶想要定義自己的類別,可按照以下步驟進(jìn)行操作:

        (1)在C++中,實(shí)現(xiàn)派生于QObject或QDeclarativeItem的子類,它是新定義item的實(shí)體對(duì)象。

        (2)在C++中,將步驟1中實(shí)現(xiàn)的新item類型注冊(cè)給QML。

        (3)在QML中,導(dǎo)入含有步驟1中定義的新item的模塊。

        (4)在QML中,向使用標(biāo)準(zhǔn)的item一樣使用新定義的item。此時(shí),可直接在QML中調(diào)用新定義的item。圖1描述了此種交互方法的具體流程。

        QML與C++方法相互調(diào)用的形式適用于以功能為主的快速原型開(kāi)發(fā),通過(guò)它,應(yīng)用程序可以很方便地把QML組件嵌入到QGraphicsView中,若想將QML與C++程序結(jié)合,程序中至少需要一個(gè)QDeclarativeEngine。為了使所有QML組件實(shí)例可以工作,QDeclarativeEngine為它們提供全局配置,QDeclarativeEngine對(duì)于C++中使用QML的作用如同QNetworkAccessManager對(duì)于網(wǎng)絡(luò)通信、路徑對(duì)于持久化存儲(chǔ)的作用。

        通過(guò)使用QDeclarativeComponent加載QML Documents。每一個(gè)QDeclarativeComponent實(shí)例對(duì)應(yīng)一個(gè)QML document。此外,還可以傳遞一個(gè)Document URL或者表示Document內(nèi)容的原始文本給QDeclarativeComponent。Document URL可以是本地文件系統(tǒng)URL,或者任何QNetworkAccessManager支持的網(wǎng)絡(luò)URL。

        通過(guò)QDeclarativeComponent::create()方法創(chuàng)建QML組件實(shí)例,這時(shí)數(shù)據(jù)通過(guò)跟上下文暴露給所有對(duì)象實(shí)例,向QML組件實(shí)例暴露數(shù)據(jù),最終通過(guò)QML屬性綁定(Property Bindings)和JavaScript對(duì)象訪問(wèn)應(yīng)用程序設(shè)置上下文屬性。

        3.2 QML與Java交互

        QML與Java的交互主要應(yīng)用于Android操作系統(tǒng)的程序開(kāi)發(fā)過(guò)程中,Qt 5中針對(duì)不同的平臺(tái)適配并開(kāi)發(fā)了不同的模塊,下文將詳細(xì)介紹典型的交互模塊Qt Android Extras。

        QtAndroid Extras模塊包含了三個(gè)類以及一個(gè)命名空間:QAndroidActivityReceiver用來(lái)接收Android的Activity的結(jié)果;QAndroidJniEnvironment用來(lái)訪問(wèn)JNI環(huán)境變量;QtAndroidJniObject對(duì)應(yīng)dalvik虛擬機(jī)中的普通Java類。此外QtAndroid命名空間中存在一些全局函數(shù),用來(lái)與Java代碼進(jìn)行交互,比如使用QtAndroid::androidActivity()來(lái)獲得當(dāng)前運(yùn)行的Activity等。

        在開(kāi)發(fā)Android平臺(tái)應(yīng)用程序時(shí),往往需要將QML與C++、Java的交互結(jié)合使用,即使用QML調(diào)用C++注冊(cè)的單例函數(shù)來(lái)實(shí)現(xiàn)調(diào)用C++代碼,再通過(guò)QtAndroidJniObject::callMethod()來(lái)調(diào)用Java的本地方法。具體形式如圖2所示。

        3.3 QML連接數(shù)據(jù)庫(kù)

        在實(shí)際應(yīng)用程序開(kāi)發(fā)過(guò)程中,數(shù)據(jù)庫(kù)的使用是不可或缺的重要操作,QML中提供了數(shù)據(jù)庫(kù)本地存儲(chǔ)的解決方案,它通過(guò)openDatabaseSync()函數(shù)提供一個(gè)能夠訪問(wèn)SQL數(shù)據(jù)庫(kù)的本地脫機(jī)存儲(chǔ),一般會(huì)將這個(gè)函數(shù)封裝在JS function內(nèi)部。

        打開(kāi)SQL數(shù)據(jù)庫(kù)時(shí),將生成數(shù)據(jù)庫(kù)文件,默認(rèn)此文件在QDeclarativeEngine::offlineStoragePath()路徑下,同時(shí)利用void setOfflineStoragePath(const QString & dir)方法修改路徑。

        此外,QML還提供了相關(guān)的數(shù)據(jù)模型進(jìn)行數(shù)據(jù)信息的組織,如ListModel、XmlListModel、VisualItemModel等,不同模型具備不相同的表現(xiàn)形式,在實(shí)際操作過(guò)程中可以將數(shù)據(jù)存到數(shù)據(jù)庫(kù)里,程序啟動(dòng)的時(shí)候從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),退出的時(shí)候?qū)odel中的數(shù)據(jù)存放回?cái)?shù)據(jù)庫(kù)中。

        3.4 HTTP下載與JSON解析

        在應(yīng)用程序開(kāi)發(fā)過(guò)程中,網(wǎng)絡(luò)是常見(jiàn)的功能模塊,它是用戶與用戶之間溝通的接口。在Qt Quick中,無(wú)法直接利用網(wǎng)絡(luò)模塊進(jìn)行通信,需要在QML與C++、Java的交互的基礎(chǔ)上進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的封裝與傳遞。

        HTTP下載的具體流程如下。首先,利用QNetworkAccessManager類發(fā)送網(wǎng)絡(luò)請(qǐng)求和接受回復(fù),利用QNetworkRequest類來(lái)管理請(qǐng)求,QNetworkReply類返回一個(gè)對(duì)象,它接收回復(fù)信息,并對(duì)數(shù)據(jù)進(jìn)行處理。當(dāng)數(shù)據(jù)下載完成后,Manager會(huì)發(fā)出finished()信號(hào)。在關(guān)聯(lián)信號(hào)的基礎(chǔ)上,相關(guān)函數(shù)將對(duì)接收的數(shù)據(jù)進(jìn)行處理,使用reply→readAll()函數(shù)就可以將下載的所有數(shù)據(jù)讀出。

        應(yīng)用程序在獲取全部數(shù)據(jù)的基礎(chǔ)上,往往需要將進(jìn)行數(shù)據(jù)解析,得到目標(biāo)信息。Qt可以調(diào)用fromJson()方法來(lái)解析文本形式的JSON數(shù)據(jù)。fromJson()接受UTF-8格式的JSON數(shù)據(jù)和QJsonParseError對(duì)象指針,fromJson()方法返回后,JSON數(shù)據(jù)就都被解析為Qt定義的各種JSON對(duì)象。最終根據(jù)數(shù)據(jù)生成QJsonDocument對(duì)象即可尋找到對(duì)應(yīng)的信息,再進(jìn)行相應(yīng)的信息轉(zhuǎn)換即可獲得目標(biāo)信息。

        4 跨平臺(tái)發(fā)布(Cross platform release)

        應(yīng)用程序開(kāi)發(fā)和測(cè)試結(jié)束并未直接向公眾開(kāi)放,開(kāi)發(fā)人員操作的最后一個(gè)環(huán)節(jié)是應(yīng)用程序的發(fā)布,程序開(kāi)發(fā)的平臺(tái)不同,發(fā)布的操作方法存在一定的差異。

        面向Andoid、iOS等操作系統(tǒng)的應(yīng)用程序發(fā)布過(guò)程較為簡(jiǎn)易,使用Qt 5版本開(kāi)發(fā)的應(yīng)用程序可以利用開(kāi)發(fā)平臺(tái)的Qt for Android、Qt for iOS直接將程序生成相應(yīng)的APK文件和IPA文件,將文件導(dǎo)入相應(yīng)的終端后即可測(cè)試運(yùn)行。

        面向Linux、BlackBerry等系統(tǒng)的發(fā)布形式較為繁瑣,此時(shí)需要打包生成適用于系統(tǒng)安裝的RPM文件。具體的實(shí)現(xiàn)流程如下:

        (1)安裝打包套件,建立打包的環(huán)境。

        (2)書(shū)寫(xiě)spec文件,此類文件對(duì)于變量的設(shè)置要求較高。

        (3)準(zhǔn)備桌面圖片,桌面文件和桌面程序的鏈接文件。

        (4)生成rpm文件,并檢查程序重要文件的拷貝路徑是否正確。此時(shí)生成的文件即是此類操作系統(tǒng)的安裝文件,可以進(jìn)行安裝測(cè)試。

        5 結(jié)論(Conclusion)

        Qt Quick是一種新的技術(shù),基于Qt Quick的應(yīng)用程序可跨平臺(tái)運(yùn)行,它為用戶提供了很好的交互方式,本文介紹了Qt Quick應(yīng)用程序的自適應(yīng)、QML與C++、Java語(yǔ)言的交互、連接數(shù)據(jù)庫(kù)、HTTP下載、JSON解析關(guān)鍵技術(shù),事實(shí)表明基于Qt Quick的應(yīng)用程序開(kāi)發(fā)簡(jiǎn)單,調(diào)用靈活,具有很好的應(yīng)用價(jià)值。

        參考文獻(xiàn)(References)

        [1] 熊萱,杜祝,譚欽文.基于Qt Quick的消息分發(fā)模型研究[J].艦船電子工程,2012,32(8):105.

        [2] 周蕾,薛澄岐,湯文成.界面元素布局設(shè)計(jì)的美度評(píng)價(jià)方法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2013,25(5):759.

        [3] 吳芳.基于事件的跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)框架設(shè)計(jì)與實(shí)現(xiàn)[J].科技風(fēng),2014(12):26.

        [4] 施偉,王碩蘋(píng),郭鳴.跨平臺(tái)移動(dòng)應(yīng)用中間適配層設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2014(16):39.

        [5] 施瑩.快速構(gòu)建跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)方案[J].價(jià)值工程,2013(29):197.

        [6] 潘曉夢(mèng),鄧建華,蘇厚勤.一種跨平臺(tái)移動(dòng)應(yīng)用方案的研究與實(shí)踐[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(1):181.

        作者簡(jiǎn)介:

        鄭純軍(1976-),男,碩士,副教授.研究領(lǐng)域:圖像理解,嵌入式系統(tǒng)開(kāi)發(fā).

        賈 寧(1985-),女,碩士,講師.研究領(lǐng)域:嵌入式系統(tǒng)開(kāi)發(fā).

        猜你喜歡
        移動(dòng)應(yīng)用跨平臺(tái)
        跨層級(jí)網(wǎng)絡(luò)、跨架構(gòu)、跨平臺(tái)的數(shù)據(jù)共享交換關(guān)鍵技術(shù)研究與系統(tǒng)建設(shè)
        一款游戲怎么掙到全平臺(tái)的錢(qián)?
        跨平臺(tái)APEX接口組件的設(shè)計(jì)與實(shí)現(xiàn)
        T學(xué)校公共設(shè)施便捷報(bào)修平臺(tái)的移動(dòng)應(yīng)用研究
        東方教育(2016年18期)2017-01-16 16:42:44
        云計(jì)算環(huán)境下的微課移動(dòng)云平臺(tái)設(shè)計(jì)
        大數(shù)據(jù)時(shí)代下免費(fèi)手機(jī)軟件盈利模式探討
        基于APICloud的“校園健身達(dá)人”APP設(shè)計(jì)與實(shí)現(xiàn)
        智能手機(jī)移動(dòng)應(yīng)用交互框架研究
        戲劇之家(2016年11期)2016-06-22 13:24:35
        移動(dòng)互聯(lián)網(wǎng)在防汛工作中的應(yīng)用
        科技視界(2016年4期)2016-02-22 08:53:41
        基于QT的跨平臺(tái)輸電鐵塔監(jiān)控終端軟件設(shè)計(jì)與實(shí)現(xiàn)
        粗大挺进尤物人妻一区二区| 99久久精品免费观看国产| 永久免费观看国产裸体美女| 黄色毛片视频免费| 国产精品亚洲一区二区三区正片| 精品日本一区二区三区| 挺进邻居丰满少妇的身体| 免费国精产品自偷自偷免费看| 精品久久久久久午夜| 中文字幕亚洲乱码熟女1区2区 | 东京道一本热码加勒比小泽| 少妇下面好爽好紧好湿一区二区| 精品丰满人妻无套内射 | 中文字幕天天躁日日躁狠狠| 国产成人av区一区二区三| 亚洲中文字幕久久精品蜜桃| 国产福利姬喷水福利在线观看| 高潮喷水无遮挡毛片视频| 国产在线一区二区三区四区乱码| 久久亚洲色一区二区三区| 老少交欧美另类| 浪荡少妇一区二区三区| 久久久亚洲成年中文字幕| 日本av一区二区三区视频| 毛片无码国产| 免费人成又黄又爽的视频在线| 成人av天堂一区二区| 日本成年一区久久综合| 成人午夜视频精品一区| 97se在线观看| 亚洲综合免费在线视频| 在线观看视频日本一区二区| 色一情一区二区三区四区| 无码中文字幕在线DVD| 午夜一区二区三区在线视频| 日本视频一区二区三区在线观看| 亚洲性无码一区二区三区| 亚洲中文字幕第一页在线| 成人国产自拍在线播放| 麻豆69视频在线观看| 4hu四虎永久在线观看|