日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)

發(fā)布時間:2024/9/27 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


這個手冊描述了使用Qt Quick面訪的方式在Androidios設(shè)備上開發(fā)QtQuick應(yīng)用程序的方法。我們使用Qt Creator實現(xiàn)一個QtQuick應(yīng)用程序,這個應(yīng)用程序基于加速器的值來加速一個SVG(可伸縮矢量圖形)。

設(shè)置開發(fā)環(huán)境:

要想能夠在移動設(shè)備上構(gòu)建和運行一個應(yīng)用程序,您必須為設(shè)備平臺設(shè)置開發(fā)環(huán)境,配置Qt Creator和手機設(shè)備之間的連接。

要想部署到Android設(shè)備,您必須下載和安裝最新的Android NDKSDK.更新SDK去獲取為開發(fā)所需的API和工具。除此之外,您必須安裝JavaJDKApache Ant.當您已經(jīng)安裝所有的這些工具以后,您必須在Qt Creator中指定它們的位置。如果想了解更多關(guān)于這方面的信息,請查看Qt for Android(http://doc.qt.io/qt-5/android-support.html)和連接Android設(shè)備(http://doc.qt.io/qtcreator/creator-developing-android.html).

?????? IOS設(shè)備上開發(fā),您必須安裝Xcode,使用它去配置一個設(shè)備。對于這個來說,您需要從蘋果收到一個蘋果開發(fā)者的賬號和ISO開發(fā)應(yīng)用認證。如果想了解更多的詳情信息,請查看連接IOS設(shè)備(http://doc.qt.io/qtcreator/creator-developing-ios.html)

創(chuàng)建項目:

1 選擇File(文件) > 新建文件或項目 > 應(yīng)用程序 > QtQuick Application > Choose.

?????? 2 在名稱文本框中,輸入accelbubble.

?????? 3在創(chuàng)建路徑中輸入項目文件存儲的路徑,例如E:\Examples??? ,接著點擊下一步(或在OSX平臺上點擊Continue.

?????? 4Qt Quick component set下拉選中,選擇Qt Quick Controls 1.1.

?????? 5選擇針對AndroiddiPhone OS的構(gòu)建套件,然后點擊下一步”.

?????? 注意:如果在工具” > “選項” > “構(gòu)建和運行” > “構(gòu)建套件里指定了構(gòu)建套件設(shè)置,那么構(gòu)建套件將會被顯示出來。筆者的設(shè)置如下:

關(guān)于Android配置,在配置它之前需要先安裝JDK,下載好了SDKNDKAnt工具:

?????? 6在這個dialog窗口后選擇下一步”,使用默認的設(shè)置。

?????? 7查看項目設(shè)置,點擊完成(或在OS X平臺上點擊完成)

?????? QtCreator生成一個默認的QML文件,在這個文件中可以創(chuàng)建應(yīng)用程序的主窗口視圖。

創(chuàng)建主窗口視圖:

在應(yīng)用程序的主窗口正中央顯示一個SVG(主窗口視圖圖形)氣泡的圖片。

在您的項目中使用被Qt Sensors例子使用的BlueBubble.svg,Accel Bubble,您必須從Qt安裝路徑下將它拷貝到項目路徑下(和QML文件相同的子目錄下)。例如:D:\Installed\QT\Examples\Qt-5.4\sensors\accelbubble\content。圖片在Resources中有,您也可以使用其它任何類型的圖片或者一個QML類型的圖片代替(本案例中使用圖片bubble.png代替)。

1 在編輯視圖,鼠標右擊qml.qrc,選擇右鍵菜單中添加現(xiàn)有文件,將項目中的bubble.png資源添加進去。添加后的效果圖如下:

在編輯視圖里面,雙擊main.qml文件,在代碼編輯視圖中打開它。

?????? 2修改ApplicationWindow類型的屬性,指定應(yīng)用程序的名稱,給定ApplicationWindowid,設(shè)置可見,插入的代碼片段如下:

import QtQuick 2.2 import QtQuick.Controls 1.1 ? ApplicationWindow { ??? title:qsTr("Accelerate Bubble") ??? id:mainWindow ??? width: 640 ??? height: 480 ??? visible:true ? }

?????? 3在導(dǎo)航區(qū)域,選中Label,按鍵盤上的delete鍵刪除它。

?

?????? 4在“庫” > “QML Type”,選擇Image,并將它拖動到畫布上。并在右側(cè)的屬性面板里source部分添加圖片。

?? 注意:您也可以在” > “資源里看到已經(jīng)添加進去的資源:

?????? 5選中上圖中的圖片,在屬性面板里,Id域中鍵入bubble,使圖片能夠在其它地方引用它。

?????? 6在代碼編輯區(qū)域,給以下的Image添加以下的新的屬性,通過這些屬性來讓將圖片定位在應(yīng)用程序的正中央。

?????? 7設(shè)置圖片位置的xy的位置,并手動添加圖片寬高屬性。

?????? 67步驟后在qml中插入的代碼片段如下:

Image {

??? id: bubble

??? source: "bubble.png"

??? smooth: true

??? property real centerX: mainWindow.width / 2

??? property real centerY: mainWindow.height / 2

??? property real bubbleCenter:bubble.width / 2

??? x: centerX - bubbleCenter??????? //圖片顯示的x坐標

??? y: centerY - bubbleCenter??????? //圖片顯示的y坐標

??? width: 100?????????????????????? //圖片的寬度?????

??? height: 100????????????????????? //圖片的高度

}

如下是您在做出改變后accelbubble.qml文件的樣子。

import QtQuick 2.2

import QtQuick.Controls 1.1

?

ApplicationWindow {

??? title: qsTr("Accelerate Bubble")

??? id:mainWindow

??? width: 640

??? height: 480

??? visible: true

?

??? Image {

??????? id: bubble

??????? source: "bubble.png"

??????? smooth: true

??????? property real centerX: mainWindow.width / 2

??????? property real centerY: mainWindow.height / 2

??????? property real bubbleCenter:bubble.width / 2

??????? x: centerX - bubbleCenter??????? //圖片顯示的x坐標??

?????? ?y: centerY - bubbleCenter??????? //圖片顯示的y坐標??

??????? width: 100?????????????????????? //圖片的寬度?????

??????? height: 100????????????????????? //圖片的高度?????

??? }

}

到此步運行的結(jié)果如下:

?????? 既然可視的元素已經(jīng)在指定位置了,我們可以通過改變加速傳感器的值來改變的bubble的位置

?????? 1添加以下import聲明到main.qml中。

import QtSensors 5.3

?????? 2添加一個含有必要屬性的Accelerometer類型的元素到main.qml中。

Accelerometer{

??? id:accel

??? dataRate: 100

??? active:true

}

?????? 3添加以下的JavaScript方法,實現(xiàn)基于當前Accelerometer的值來計算這個bubble的位置。

function calcPitch(x,y,z) {

??????? return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);

??? }

???

??? function calcRoll(x,y,z)

??? {

??????? return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);

??? }

?????? 4Accelerometer類型的onReadingChanged信號添加以下的JavaScript代碼,讓bubble隨著Accelerometer的值變化而移動位置。

Accelerometer{

??????? id:accel

??????? dataRate: 100

??????? active:true

???????

??????? onReadingChanged: {

??????????? var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)

??????????? var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * 0.1)

???????????

??????????? //如果newXnewY都是空的,直接返回

??????????? if (isNaN(newX) || isNaN(newY))

??????????????? return;

???????????

??????????? //如果newX小于0,讓newX = 0

??????????? if (newX < 0)

??????????????? newX = 0

???????????

??????????? if (newX > mainWindow.width - bubble.width)

??????????????? newX = mainWindow.width - bubble.width

???????????

??????????? if (newY < 18)

??????????????? newY = 18

???????????

??????????? if (newY > mainWindow.height - bubble.height)

??????????????? newY = mainWindow.height - bubble.height

???? ???????

??????????? bubble.x = newX

??????????? bubble.y = newY

??????? }

}

?????? 要想確保bubble的位置總是在屏幕邊界內(nèi)部。如果Accelerometer返回的不是一個數(shù)值(NaN),值將會被忽略,bubble的位置將不產(chǎn)生更新。

?????? bubblexy屬性上添加SmoothedAnimation行為,讓它移動的時候看起來是平滑的。

import QtQuick 2.2

import QtQuick.Controls 1.1

import QtSensors 5.3

?

ApplicationWindow {

??? title: qsTr("Accelerate Bubble")

??? id:mainWindow

??? width: 640

??? height: 480

??? visible: true

???

??? function calcPitch(x,y,z) {

??????? return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);

??? }

???

??? function calcRoll(x,y,z)

??? {

??????? return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);

??? }

???

??? Image {

??????? id: bubble

??????? source: "bubble.png"

??????? smooth: true

??????? property real centerX: mainWindow.width / 2

??????? property real centerY: mainWindow.height / 2

??????? property real bubbleCenter:bubble.width / 2

??????? x: centerX - bubbleCenter??????? //圖片顯示的x坐標??

??????? y: centerY - bubbleCenter??????? //圖片顯示的y坐標??

??????? width: 100?????????????????????? //圖片的寬度?????

??????? height: 100????????????????????? //圖片的高度??

?????? ?

??????? Behavior on y {

??????????? SmoothedAnimation {

??????????????? easing.type: Easing.Linear

??????????????? duration: 100

??????????? }

??????? }

???????

??????? Behavior on x {

??????????? SmoothedAnimation {

??????????????? easing.type: Easing.Linear

??????????????? duration: 100

??????????? }

??????? }

??? }

???

??? Accelerometer{

??????? id:accel

??????? dataRate: 100

??????? active:true

???????

??????? onReadingChanged: {

??????????? var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y,

??????????????????????????????????????????? accel.reading.z) * 0.1)

??????????? var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y,

???????????????????????????????????????????? accel.reading.z) * 0.1)

???????????

??????????? //如果newXnewY都是空的,直接返回

??????????? if (isNaN(newX) || isNaN(newY))

??????????????? return;

???????????

??????????? //如果newX小于0,讓newX = 0

??????????? if (newX < 0)

??????????????? newX = 0

???????????

??????????? if (newX > mainWindow.width - bubble.width)

??????????????? newX = mainWindow.width - bubble.width

???????????

??????????? if (newY < 18)

??????????????? newY = 18

???????????

??????????? if (newY > mainWindow.height - bubble.height)

??????????????? newY = mainWindow.height - bubble.height

??????? ????

??????????? bubble.x = newX

??????????? bubble.y = newY

??????? }

???????

??? }

}

鎖定設(shè)備方向:

默認情況下當設(shè)備的方向改變的時候,屏幕默認是跟著旋轉(zhuǎn)的。如果屏幕的旋轉(zhuǎn)方向固定,那么現(xiàn)實的效果會更加好。

?????? Android手機中的旋轉(zhuǎn)屬性進行固定住。Qt Creator中生成的AndroidManifest.xml中可以指定它。如果想了解更多關(guān)于這方面的信息,請查看編輯Manifest文件”(http://doc.qt.io/qtcreator/creator-deploying-android.html#editing-manifest-files).

?????? IOS平臺上,您可以在一個Info.plist文件鎖定設(shè)備的方向,這個plist文件在.pro文件中作為QMAKEINFO PLIST參數(shù)來指定。

添加依賴信息

添加依賴:

更新accelbubble.pro文件,跟上以下庫依賴信息:

QT += quick sensors svg xml

?????? IOS平臺上,您必須靜態(tài)鏈接上面的庫,通過添加插件的名稱,明確指定插件QTPLUGIN參數(shù)的各各值。為ios構(gòu)建指定一個qmake范圍(在這個qmake里面也包含QMAKE INFO PLIST參數(shù)信息)。

ios {

QTPLUGIN += qsvg qsvgicon qtsensors_ios

QMAKE_INFO_PLIST = Info.plist

}

?????? 添加完了依賴以后,選擇構(gòu)建” > “執(zhí)行qmake”,將改變應(yīng)用到項目的Makefile文件中去。

添加資源:

您需要添加Bluebubble.svg圖片文件到要部署到手機設(shè)備上的應(yīng)用程序資源文件夾里去。

選中項目中的qml.qrc文件,右擊這個qrc文件,選擇添加現(xiàn)有文件Bluebubble.svg文件添加進去。

運行應(yīng)用程序:

應(yīng)用程序被編譯并且將部署到設(shè)備上:

?????? 1啟動Android設(shè)備上的USB調(diào)試功能,或者啟動ios設(shè)備上的開發(fā)者模式。

?????? 2將設(shè)備連接到開發(fā)電腦上。

?????? 如果您正在運行的是Androidv4.2.2,手機上將彈出一個對話框讓您去確定使用允許USB調(diào)試模式連接到PC機上。要避免每次連接設(shè)備的時候彈出一個對話框,點擊總是允許電腦”,并選擇OK.

?????? 3在設(shè)備上運行應(yīng)用程序,按Ctrl+R

示例代碼:

?????? 當您一步步完成之后,main.qml文件看起來應(yīng)該像下面的樣子:

import QtQuick 2.2

import QtQuick.Controls 1.1

import QtSensors 5.3

?

ApplicationWindow {

??? title: qsTr("Accelerate Bubble")

??? id:mainWindow

??? width: 640

??? height: 480

??? visible: true

?

??? function calcPitch(x,y,z) {

??????? return -(Math.atan(y / Math.sqrt(x * x + z * z)) * 57.2957795);

??? }

?

??? function calcRoll(x,y,z)

??? {

??????? return -(Math.atan(x / Math.sqrt(y * y + z * z)) * 57.2957795);

??? }

?

??? Image {

??????? id: bubble

??????? source: "bubble.png"

??????? smooth: true

??????? property real centerX: mainWindow.width / 2

??????? property real centerY: mainWindow.height / 2

??????? property real bubbleCenter:bubble.width / 2

??????? x: centerX - bubbleCenter??????? //圖片顯示的x坐標

??????? y: centerY - bubbleCenter??????? //圖片顯示的y坐標

??????? width: 100?????????????????????? //圖片的寬度

??????? height: 100????????????????????? //圖片的高度

?

??????? Behavior on y {

?????????? ?SmoothedAnimation {

??????????????? easing.type: Easing.Linear

??????????????? duration: 100

??????????? }

??????? }

?

??????? Behavior on x {

??????????? SmoothedAnimation {

??????????????? easing.type: Easing.Linear

??????????????? duration: 100

?????? ?????}

??????? }

??? }

?

??? Image {

??????? id: blueubble

??????? source: "Bluebubble.svg" //注意要讓svg圖顯示在手機上,要在pro文件中添加Qt += svg

??????? smooth: true

??????? property real centerX: mainWindow.width / 4

??????? property real centerY: mainWindow.height / 4

??????? property real blueubbleCenter:blueubble.width / 2

??????? x: centerX - blueubbleCenter???? //圖片顯示的x坐標

??????? y: centerY - blueubbleCenter???? //圖片顯示的y坐標

??????? width: 100?????????????????????? //圖片的寬度

??????? height: 100????????????????????? //圖片的高度

??? }

?

??? Accelerometer{

??????? id:accel

??????? dataRate: 100

??????? active:true

?

??????? onReadingChanged: {

??????????? var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y,

??????????????????????????????????????????? accel.reading.z) * 0.1)

??????????? var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y,

???????????????????????????????????????????? accel.reading.z) * 0.1)

?

??????????? //如果newXnewY都是空的,直接返回

??????????? if (isNaN(newX) || isNaN(newY))

??????? ????????return;

?

??????????? //如果newX小于0,讓newX = 0

??????????? if (newX < 0)

??????????????? newX = 0

?

??????????? if (newX > mainWindow.width - bubble.width)

??????????????? newX = mainWindow.width - bubble.width

?

??????????? if (newY < 18)

?????????? ?????newY = 18

?

??????????? if (newY > mainWindow.height - bubble.height)

??????????????? newY = mainWindow.height - bubble.height

?

??????????? bubble.x = newX

??????????? bubble.y = newY

??????? }

??? }

?

??? menuBar:MenuBar {

??????? Menu{

??????????? title:qsTr("File")

??????????? MenuItem{

??????????????? text:qsTr("&Open")

??????????????? onTriggered: console.log("Open action triggered");

??????????? }

??????????? MenuItem{

??????????????? text:qsTr("Exit")

??????????????? onTriggered:Qt.quit();

??? ????????}

??????? }

??? }

}

上面的例子在華為手機上運行的效果圖如下:

總結(jié)

以上是生活随笔為你收集整理的创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。