Qt-5開發(fā)及實例-第23章-QML編程基礎_第1頁
Qt-5開發(fā)及實例-第23章-QML編程基礎_第2頁
Qt-5開發(fā)及實例-第23章-QML編程基礎_第3頁
Qt-5開發(fā)及實例-第23章-QML編程基礎_第4頁
Qt-5開發(fā)及實例-第23章-QML編程基礎_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第23章QML編程基礎——QML概述QML概述QML是通過QtQML引擎在程序運行時解析并運行的。Qt5.11更高性能的編譯器通道意味著使用QML編寫的程序啟動時及運行時速度更快、效率更高。QML新、舊編譯器通道如圖23.1所示。01第一個QML程序第一個QML程序【例】(簡單)(CH2301)這里先從一個最簡單的QML程序入手,介紹QML的基本概念。創(chuàng)建QML應用程序,步驟如下。(1)啟動QtCreator,單擊主菜單“文件”→“新建文件或項目…”項,彈出“NewFileorProject”對話框,如圖23.2所示,選擇項目“Application”下的“QtQuickApplication”模板。第一個QML程序(2)單擊“Choose…”按鈕,在“QtQuickApplication”對話框的“ProjectLocation”頁輸入項目名稱“QmlDemo”,并選擇保存項目的路徑,如圖23.3所示。第一個QML程序(3)單擊“下一步”按鈕,在“DefineProjectDetails”頁選擇“Qt5.7”,如圖23.4所示。第一個QML程序(4)單擊“下一步”按鈕,在“KitSelection”頁,系統(tǒng)默認已指定程序的編譯器和調試器,如圖23.5所示,直接單擊“下一步”按鈕。第一個QML程序(5)在“ProjectManagement”頁上自動匯總出要添加到該項目的文件,如圖23.6所示,單擊“完成”按鈕完成QML應用程序的創(chuàng)建。第一個QML程序此時,系統(tǒng)自動將這些文件組織起來生成項目工程,并預生成了一個QML代碼的框架,其中main.qml為項目啟動的主程序文件,代碼如下:importQtQuick2.7importQtQuick.Window2.2Window{visible:truewidth:640height:480title:qsTr("HelloWorld")MainForm{anchors.fill:parentmouseArea.onClicked:{console.log(qsTr('Clickedonbackground.Text:"'+textEdit.text+'"'))}}}第一個QML程序單擊

按鈕運行程序,彈出“HelloWorld”窗口,窗口的上部有一個文本輸入框(默認顯示“Entersometext...”),在框中輸入“HelloWorld!”后用鼠標單擊該框外窗口內的任意位置,可以看到開發(fā)環(huán)境底部“應用程序輸出”子窗口中輸出一行文本“qml:Clickedonbackground.Text:"HelloWorld!"”,整個過程如圖23.7所示。1.import部分2.對象聲明02QML文檔構成1.import部分此部分導入需要使用的QtQuick庫,這些庫由Qt5提供,包含了用戶界面最通用的類和功能,如本程序main.qml文件開頭的兩句:importQtQuick2.7 //導入QtQuick2.7庫importQtQuick.Window2.2 //導入QtQuick窗體庫導入這些庫后,用戶就可以在自己編寫的程序中訪問QtQuick所有的QML類型、接口和功能。2.對象聲明這是一個QML程序代碼的主體部分,它以層次化的結構定義了可視場景中將要顯示的元素,如矩形、圖像、文本及獲取用戶輸入的對象……它們都是QtQuick為用戶界面開發(fā)提供的基本構件。例如,main.qml的對象聲明部分:Window{ //對象visible:true //屬性width:640height:480title:qsTr("HelloWorld")MainForm{ //子對象

...}}1.對象和屬性2.對象標識符03QML基本語法3.屬性別名4.注釋QML基本語法子對象MainForm的詳細代碼在MainForm.ui.qml文件中,它也是一個QML文檔,讀者在編程設計UI界面時主要使用的就是這個文件。下面以該文件的內容為例來簡單介紹QML的語法。在項目視圖中雙擊MainForm.ui.qml文件(與main.qml位于同一目錄)并打開,切換到編輯模式,可以看到其代碼(為便于講解,加了注釋)。1.對象和屬性對象由它們的類型指定,以大寫字母開頭,后面跟一對大括號{},{}之中是該對象的屬性,屬性以鍵值對“屬性名:值”的形式給出,比如在代碼中:Rectangle{ ...width:360 //屬性(寬度)height:360 //屬性(高度) ...}定義了一個寬度和高度都是360像素的矩形。QML允許將多個屬性寫在一行,但它們之間必須用分號隔開,所以以上代碼也可以寫為:Rectangle{ ...width:360;height:360 //屬性(寬度和高度) ...}對象MouseArea是可以響應鼠標事件的區(qū)域,作為子對象,它可以使用parent關鍵字訪問其父對象Rectangle。其屬性anchors.fill起到布局作用,它會使MouseArea充滿一個對象的內部,這里設值為parent表示MouseArea充滿整個矩形,即整個窗口內部都是鼠標響應區(qū)。2.對象標識符每個對象都可以指定一個唯一的id值,這樣便可以在其他對象中識別并引用該對象。例如在本例代碼中:MouseArea{ id:mouseArea ...}就給MouseArea指定了id為mouseArea??梢栽谝粋€對象所在的QML文檔中的任何地方,通過使用該對象的id來引用該對象。因此,id值在一個QML文檔中必須是唯一的。對于一個QML對象而言,id值是一個特殊的值,不要把它看成一個普通的屬性,例如,無法使用mouseArea.id來進行訪問。一旦一個對象被創(chuàng)建,它的id就無法被改變了。3.屬性別名屬性也可以有別名,QML使用alias關鍵字聲明屬性的別名:“propertyalias別名:屬性名”,如在本例中:Rectangle{ propertyaliasmouseArea:mouseArea //MouseArea的屬性別名propertyaliastextEdit:textEdit //TextEdit的屬性別名 ...MouseArea{ id:mouseArea ...}TextEdit{id:textEdit ...}}3.屬性別名這里把MouseArea看成Rectangle的一個屬性(QML中的子對象也可視為其父對象的屬性),取其id(mouseArea)為屬性名,并給它定義一個別名“mouseArea”,這樣做的目的是為了在外部QML文檔(main.qml)中也能訪問到MouseArea。因為MouseArea內置了一個onClicked屬性,它是一個回調(鼠標單擊事件),定義了別名后,就可在main.qml代碼中訪問這個屬性:mouseArea.onClicked:{console.log(qsTr('Clickedonbackground.Text:"'+textEdit.text+'"'))}當單擊事件發(fā)出時,就會執(zhí)行onClicked中的代碼,在開發(fā)環(huán)境底部的“應用程序輸出”子窗口中輸出文本“qml:Clickedonbackground.Text:"HelloWorld!"”。同理,TextEdit也可看成Rectangle的一個屬性,并為其定義別名和引用。4.注釋QML文檔的注釋同C/C++、JavaScript代碼的注釋一樣:(1)單行注釋使用“//”開始,在行的末尾結束。(2)多行注釋使用“/*”開始,使用“*/”結尾。因具體寫法在前面代碼中都給出過,故這里不再贅述。第23章QML編程基礎——QML可視元素01Rectangle(矩形)元素Rectangle(矩形)元素【例】(簡單)(CH2302)在窗口中繪制矩形,運行效果如圖23.8所示。具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Rectangle”。(2)雙擊項目視圖打開MainForm.ui.qml文件,修改代碼。Rectangle(矩形)元素(3)雙擊打開main.qml文件,修改代碼如下:importQtQuick2.7importQtQuick.Window2.2Window{visible:truewidth:250height:220title:qsTr("Rectangle")MainForm{anchors.fill:parentmouseArea.onClicked:{topRect.visible=!topRect.visible//控制矩形對象的可見性}}}由于已經(jīng)在MainForm.ui.qml文件中定義了屬性別名,故這里可以直接用矩形對象的標識符topRect訪問其visible屬性以達到控制可見性的目的。在程序運行中,單擊窗體內任意位置,矩形topRect將時隱時現(xiàn)。02Image(圖像)元素Image(圖像)元素【例】(簡單)(CH2303)將一張較大的風景圖片適當?shù)乜s小后顯示在窗體中,運行效果如圖23.9所示。具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Image”。(2)在項目工程目錄中建一個images文件夾,其中放入一張圖片,該圖片是用數(shù)碼相機拍攝(尺寸為980像素×751像素)的,文件名為“長白山天池.jpg”。(3)右擊項目視圖“資源”→“qml.qrc”下的“/”節(jié)點,選擇“添加現(xiàn)有文件…”項,從彈出的對話框中選擇事先準備的“長白山天池.jpg”文件并打開,如圖23.10所示,將其加載到項目中。

Image(圖像)元素(4)打開MainForm.ui.qml文件,修改代碼如下:...Rectangle{ ...Image{ //圖片在窗口中的位置坐標x:20y:20 //寬和高均為原圖的1/4width:980/4;height:751/4 //(a)source:"images/長白山天池.jpg" //圖片路徑URLfillMode:Image.PreserveAspectCrop //(b)clip:true //避免所要渲染的圖片超出元素范圍}}其中,(a)width:980/4;height:751/4:Image的width和height屬性用來設定圖元的大小,如果沒有設置,則Image會使用圖片本身的尺寸;如果設置了,則圖片就會拉伸來適應這個尺寸。本例設置它們均為原圖尺寸的1/4,為的是使其縮小后不變形。(b)fillMode:Image.PreserveAspectCrop:fillMode屬性設置圖片的填充模式,它支持Image.Stretch(拉伸)、Image.PreserveAspectFit(等比縮放)、Image.PreserveAspectCrop(等比縮放,最大化填充Image,必要時裁剪圖片)、Image.Tile(在水平和垂直兩個方向平鋪,就像貼瓷磚那樣)、Image.TileVertically(垂直平鋪)、Image.TileHorizontally(水平平鋪)、Image.Pad(保持圖片原樣不做變換)等模式。03Text(文本)元素Text(文本)元素【例】(簡單)(CH2304)各種典型文字效果的演示,運行效果如圖23.11所示。具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Text”。(2)打開MainForm.ui.qml文件,修改代碼。其中,(a)text:"<b>Hello</b><i>QtQuick!</i>":Text元素支持用HTML類型標記定義富文本,它有一個textFormat屬性,默認值為Text.RichText(輸出富文本);若顯式地指定為Text.PlainText,則會輸出純文本(連同HTML標記一起作為字符輸出)。(b)style:Text.Outline;styleColor:"blue":style屬性設置文本的樣式,支持的文本樣式有Text.Normal、Text.Outline、Text.Raised和Text.Sunken;styleColor屬性設置樣式的顏色,這里是藍色。(c)elide:Text.ElideRight:設置省略文本的部分內容來適合Text的寬度,若沒有對Text明確設置width值,則elide屬性將不起作用。elide可取的值有Text.ElideNone(默認,不省略)、Text.ElideLeft(從左邊省略)、Text.ElideMiddle(從中間省略)和Text.ElideRight(從右邊省略)。(d)wrapMode:Text.WrapAnywhere:如果不希望使用elide省略顯示方式,還可以通過wrapMode屬性指定換行模式,本例中設為Text.WrapAnywhere,即只要達到邊界(哪怕在一個單詞的中間)都會進行換行;若不想這么做,可設為Text.WordWrap只在單詞邊界換行。04自定義元素(組件)自定義元素(組件)【例】(難度一般)(CH2305)自定義創(chuàng)建一個Button組件并在主窗口中使用它,運行效果如圖23.12所示。自定義元素(組件)具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Custom”。(2)右擊項目視圖“資源”→“qml.qrc”下的“/”節(jié)點,選擇“添加新文件…”項,彈出“新建文件”對話框,如圖23.13所示,選擇文件和類“Qt”下的“QMLFile(QtQuick2)”模板。自定義元素(組件)(3)單擊“Choose…”按鈕,在“Location”頁輸入文件名“Button”,并選擇保存路徑(本項目文件夾下),如圖23.14所示。自定義元素(組件)(4)打開Button.qml文件,編寫代碼如下:importQtQuick2.0Rectangle{ //將Rectangle自定義成按鈕id:btnwidth:100;height:62 //按鈕的尺寸color:"teal" //按鈕顏色border.color:"aqua" //按鈕邊界色border.width:3 //按鈕邊界寬度Text{ //Text元素作為按鈕文本id:labelanchors.centerIn:parentfont.pointSize:16text:"開始"}MouseArea{ //MouseArea對象作為按鈕單擊事件響應區(qū)anchors.fill:parentonClicked:{ //響應單擊事件代碼label.text="按鈕已按下!"label.font.pointSize=11 //改變按鈕文本和字號btn.color="aqua" //改變按鈕顏色btn.border.color="teal" //改變按鈕邊界色}}}自定義元素(組件)(5)打開MainForm.ui.qml文件,修改代碼如下:...Rectangle{ ...MouseArea{id:mouseAreaanchors.fill:parent}Button{ //復用Button組件x:25;y:25}}第23章QML編程基礎——QML元素布局1.行列、網(wǎng)格定位2.流定位(Flow)01Positioner(定位器)3.重復器(Repeater)1.行列、網(wǎng)格定位【例】(簡單)(CH2306)行列和網(wǎng)格定位分別使用Row、Column和Grid元素,運行效果如圖23.15所示。1.行列、網(wǎng)格定位具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Positioner”。(2)按23.2.4節(jié)介紹的方法定義紅、綠、藍三個矩形組件,代碼分別如下:/*紅色矩形,源文件RedRectangle.qml*/importQtQuick2.0Rectangle{width:64 //寬度height:32 //高度color:"red" //顏色border.color:Qt.lighter(color) //邊框色設置比填充色淺(默認是50%)}/*綠色矩形,源文件GreenRectangle.qml*/importQtQuick2.0Rectangle{width:48height:62color:"green"border.color:Qt.lighter(color)}/*藍色矩形,源文件BlueRectangle.qml*/importQtQuick2.0Rectangle{width:80height:50color:"blue"border.color:Qt.lighter(color)}1.行列、網(wǎng)格定位(3)打開MainForm.ui.qml文件,修改代碼。其中,(a)Row{…}:Row將被其定位的元素成員都放置在一行的位置,所有元素之間的間距相等(由spacing屬性設置),頂端保持對齊。layoutDirection屬性設置元素的排列順序,可取值為Qt.LeftToRight(默認,從左向右)、Qt.RightToLeft(從右向左)。(b)Column{…}:Column將元素成員按照加入的順序從上到下在同一列排列出來,同樣由spacing屬性指定元素間距,所有元素靠左對齊。(c)Grid{…}:Grid將其元素成員排列為一個網(wǎng)格,默認從左向右排列,每行4個元素??赏ㄟ^設置rows和columns屬性來自定義行和列的數(shù)值,如果二者有一個不顯式設置,則另一個會根據(jù)元素成員的總數(shù)計算出來。例如,本例中的columns設置為3,一共放入5個藍色矩形,行數(shù)就會自動計算為2。2.流定位(Flow)【例】(簡單)(CH2306續(xù))流定位使用Flow元素,運行效果如圖23.16所示。具體實現(xiàn)步驟如下。(1)仍然使用上例的項目“Positioner”,在其基礎上修改。(2)打開MainForm.ui.qml文件,修改代碼如下:importQtQuick2.7Rectangle{propertyaliasmouseArea:mouseAreawidth:200;height:200 //(a)MouseArea{id:mouseAreaanchors.fill:parent}Flow{ //(b)anchors.fill:parentanchors.margins:15 //元素與窗口左上角邊距為15像素spacing:5

//以下添加被Flow定位的元素成員RedRectangle{}BlueRectangle{}GreenRectangle{}}}2.流定位(Flow)3.重復器(Repeater)【例】(簡單)(CH2307)Repeater結合Grid來排列一組矩形元素,運行效果如圖23.17所示。具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Repeater”。(2)打開MainForm.ui.qml文件,修改代碼。其中,(a)Repeater{…}:重復器,作為Grid的數(shù)據(jù)提供者,它可以創(chuàng)建任何QML基本的可視元素。因Repeater會按照其model屬性定義的個數(shù)循環(huán)生成子元素,故上面代碼重復生成16個Rectangle。(b)text:index:Repeater會為每個子元素注入一個index屬性,作為當前的循環(huán)索引(本例中是0~15)。因可以在子元素定義中直接使用這個屬性,故這里用它給Text的text屬性賦值。02Anchor(錨)Anchor(錨)除前面介紹的Row、Column和Grid等外,QML還提供了一種使用Anchor(錨)來進行元素布局的方法。每個元素都可被認為有一組無形的“錨線”:left、horizontalCenter、right、top、verticalCenter和bottom,如圖23.18所示,Text元素還有一個baseline錨線(對于沒有文本的元素,它與top相同)。Anchor(錨)這些錨線分別對應元素中的anchors.left、anchors.horizontalCenter等屬性,所有的可視元素都可以使用錨來布局。錨系統(tǒng)還允許為一個元素的錨指定邊距(margin)和偏移(offset)。邊距指定了元素錨到外邊界的空間量,而偏移允許使用中心錨線來定位。一個元素可以通過leftMargin、rightMargin、topMargin和bottomMargin來獨立地指定錨邊距,如圖23.19所示,也可以使用anchor.margins來為所有的4個錨指定相同的邊距。Anchor(錨)【例】(難度一般)(CH2308)使用Anchor布局一組矩形元素,并測試錨的特性,布局運行效果如圖23.20所示。Anchor(錨)具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Anchor”。(2)本項目需要復用之前已開發(fā)的組件。將前面實例CH1905和CH1906中的源文件Button.qml、RedRectangle.qml、GreenRectangle.qml及BlueRectangle.qml復制到本項目目錄下。右擊項目視圖“資源”→“qml.qrc”下的“/”節(jié)點,選擇“添加現(xiàn)有文件…”項,彈出“添加現(xiàn)有文件”對話框,如圖23.21所示,選中上述幾個.qml文件,單擊“打開”按鈕將它們添加到當前項目中。Anchor(錨)(3)打開MainForm.ui.qml文件,修改代碼。其中,(a)/*定義屬性別名*/:這里定義矩形changingRect1、changingRect2及redRect的別名,目的是在按鈕組件的源文件(外部QML文檔)中能訪問這幾個元素,以便測試它們的錨定特性。(b)/*使用Anchor對三個矩形元素進行橫向布局*/:這段代碼使用已定義的三個現(xiàn)成矩形元素,通過分別設置anchors.left、anchors.top、anchors.leftMargin、anchors.topMargin等錨屬性,對它們進行從左到右的布局,這與之前介紹的Row的布局作用一樣。讀者還可以修改其他錨屬性以嘗試更多的布局效果。(c)/*對比測試Anchor的性質*/:錨屬性還可以在程序運行中通過代碼設置來動態(tài)地改變,為了對比,本例設計使用兩個相同的紅矩形,初始它們都與窗體左錨線錨定(對齊),然后改變右錨屬性來觀察它們的行為。(d)width:95;height:35:按鈕組件原定義尺寸為“width:100;height:62”,復用時可以重新定義它的尺寸屬性以使程序界面更美觀。新屬性值會“覆蓋”原來的屬性值,就像面向對象的“繼承”一樣提高了靈活性。Anchor(錨)(4)打開Button.qml文件,修改代碼如下:...Rectangle{id:btnwidth:100;height:62...Text{ ...}MouseArea{anchors.fill:parentonClicked:{label.text="按鈕已按下!"label.font.pointSize=11btn.color="aqua"btn.border.color="teal" /*改變changingRect1的右錨屬性*/ //(a)chgRect1.anchors.left=undefinedchgRect1.anchors.right=rRect.right /*改變changingRect2的右錨屬性*/ //(b)chgRect2.anchors.right=rRect.rightchgRect2.anchors.left=undefined}}}Anchor(錨)其中,(a)/*改變changingRect1的右錨屬性*/:這里用“chgRect1.anchors.left=undefined”先解除其左錨屬性的定義,然后再定義右錨屬性,執(zhí)行后,該矩形便會移動到與redRect(第一行最右邊的紅矩形)右對齊。(b)/*改變changingRect2的右錨屬性*/:這里先用“chgRect2.anchors.right=rRect.right”指定右錨屬性,由于此時元素的左錨屬性尚未解除,執(zhí)行后,矩形位置并不會移動,而是寬度自動“拉長”到與redRect右對齊,之后即使再解除左錨屬性也無濟于事,故用戶在編程改變布局時,一定要先將元素的舊錨解除,新設置的錨才能生效!第23章QML編程基礎——QML事件處理01

鼠標事件【例】(難度一般)(CH2309)使用MouseArea接受和響應鼠標單擊、拖曳等事件,運行效果如圖23.22所示。

鼠標事件具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“MouseArea”。(2)右擊項目視圖“資源”→“qml.qrc”下的“/”節(jié)點,選擇“添加新文件…”項,新建Rect.qml文件,編寫代碼。其中,(a)/*拖曳屬性設置*/:MouseArea中的drag分組屬性提供了一個使元素可被拖曳的簡便方法。drag.target屬性用來指定被拖曳的元素的id(這里為parent表示被拖曳的就是所在元素本身);drag.active屬性獲取元素當前是否正在被拖曳的信息;drag.axis屬性用來指定拖曳的方向,可以是水平方向(Drag.XAxis)、垂直方向(Drag.YAxis)或者兩個方向都可以(Drag.XandYAxis);drag.minimumX和drag.maximumX限制了元素在指定方向上被拖曳的范圍。(b)acceptedButtons:Qt.LeftButton|Qt.RightButton:MouseArea所能接受的鼠標按鍵,可取的值有Qt.LeftButton(鼠標左鍵)、Qt.RightButton(鼠標右鍵)和Qt.MiddleButton(鼠標中鍵)。(c)mouse.button:為MouseArea信號中所包含的鼠標事件參數(shù),其中mouse為鼠標事件對象,可以通過它的x和y屬性獲取鼠標當前的位置;通過button屬性獲取按下的按鍵。(d)mouse.modifiers&Qt.ShiftModifier:通過modifiers屬性可以獲取按下的鍵盤修飾符,modifiers的值由多個按鍵進行位組合而成,在使用時需要將modifiers與這些特殊的按鍵進行按位與來判斷按鍵,常用的按鍵有Qt.NoModifier(沒有修飾鍵)、Qt.ShiftModifier(一個Shift鍵)、Qt.ControlModifier(一個Ctrl鍵)、Qt.AltModifier(一個Alt鍵)。

鼠標事件(3)打開MainForm.ui.qml文件,修改代碼如下:...Rectangle{ ...MouseArea{id:mouseAreaanchors.fill:parent} ...Rect{ //復用定義好的矩形元素x:25;y:25 //初始坐標opacity:(360.0-x)/360 //透明度設置}}02鍵

件鍵盤事件【例】(難度一般)(CH2310)利用鍵盤事件處理制作一個模擬桌面應用圖標選擇程序,運行效果如圖23.23所示,按Tab鍵切換選項,當前選中的圖標以彩色放大顯示,還可以用←、↑、↓、→方向鍵移動圖標位置。鍵盤事件具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“Keyboard”。(2)打開MainForm.ui.qml文件,修改代碼。其中,(a)KeyNavigation.tab:play:QML中的KeyNavigation元素是一個附加屬性,可以用來實現(xiàn)使用方向鍵或Tab鍵來進行元素的導航。它的子屬性有backtab、down、left、priority、right、tab和up等,本例用其tab屬性設置焦點轉移次序,“KeyNavigation.tab:play”表示按下Tab鍵焦點轉移到id為“play”的元素(“游戲”圖標)。(b)/*移動圖標位置*/:這里使用Keys屬性來進行按下方向鍵后的事件處理,它也是一個附加屬性,對QML所有的基本可視元素均有效。Keys屬性一般與focus屬性配合使用,只有當focus值為true時,它才起作用,由Keys屬性獲取相應鍵盤事件的類型,進而決定所要執(zhí)行的操作。03輸入控件與焦點輸入控件與焦點【例】(難度中等)(CH2311)用QML輸入元素定制文本框,可用Tab鍵控制其焦點轉移,運行效果如圖23.24所示。輸入控件與焦點具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“TextInput”。(2)右擊項目視圖“資源”→“qml.qrc”下的“/”節(jié)點,選擇“添加新文件…”項,新建TextBox.qml文件,編寫代碼。其中,(a)FocusScope{…}:將自定義的組件置于FocusScope元素中是為了能有效地控制焦點。因TextInput是作為Rectangle的子元素定義的,在程序運行時,Rectangle不會主動將焦點轉發(fā)給TextInput,故輸入框無法自動獲得焦點。(b)propertyaliaslabel:label.text:定義Text元素的text屬性的別名,是為了在編程時引用該別名修改文本框前的提示文本,定制出“學號”“姓名”等對應不同輸入項的文本框,增強通用性。

(c)propertyaliastext:input.text:為了讓外界可以直接設置TextInput的text屬性,給這個屬性也聲明了一個別名。(d)Row{…}:用Row定位器設計出這個復合組件的外觀,它由Text和Rectangle兩個元素行布局排列組合而成,兩者頂端對齊,相距spacing為5。(e)Rectangle{…}:矩形元素作為TextInput的父元素,是專為呈現(xiàn)輸入框可視外觀的,QML本身提供的TextInput只有光標和文本內容而無邊框,將矩形設為白色灰邊框,對TextInput進行可視化修飾。(f)TextInput:這才是真正實現(xiàn)該組件核心功能的元素,將其定義為矩形的子元素并且充滿整個Rectangle,就可以呈現(xiàn)出與文本框一樣的可視效果。(3)打開MainForm.ui.qml文件,修改代碼。第23章QML編程基礎——QML集成JavaScript01調用JavaScript函數(shù)調用JavaScript函數(shù)【例】(難度一般)(CH2312)編寫JavaScript函數(shù)實現(xiàn)圖形的旋轉,每單擊一次鼠標,矩形就轉動一個隨機的角度,運行效果如圖23.25所示。具體實現(xiàn)步驟如下。(1)新建QML應用程序,項目名稱為“JavaScript”。(2)右擊項目視圖“資源”→“qml.qrc”下的“/”節(jié)點,選擇“添加新文件…”項,新建RotateRect.qml文件,編寫代碼。調用Java

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論