成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt Quick初體驗QML編程

移動開發
QML是什么? QML是一種描訴性的腳本語言,文件格式以.qml結尾。語法格式非常像CSS(參考后文具體例子),但又支持javacript形式的編程控制。

本文介紹的是Qt Quick初體驗QML編程,QML它結合了QtDesigner UI和QtScript的有點。QtDesigner可以設計出.ui界面文件,但是不支持和Qt原生C++代碼的交互。

Creating a Menu Page

到現在,我們(的教程)已經涵蓋了如何在單一的QML文件中創建元素和指定行為。在這一節,我們的內容將包含怎樣導入QML元素和如何復用一些創建好的組件來生成其他組件。

菜單顯示一個內容列表,每一項都能執行一個動作。我們可以通過幾種方式在QML創建一個菜單。首先,我們建立一個包含按鈕的菜單,每個按鈕最終都會執行不同動作。菜單代碼在FileMenu.qml中。

  1. Code import QtQuick 1.0                \\import the main Qt QML module  
  2.  import "folderName"            \\import the contents of the folder  
  3.  import "script.js" as Script        \\import a Javascript file and name it as Script 

上面的語法可以看出怎么樣使用import關鍵字。FileMenu.qml需要用到JavaScript文件,或者不在同級目錄下的QML文件。因為Button.qml和FileMenu.qml在同一個目錄,我們不需要引入就可以使用它。我們可以通過聲明Button{}來直接創建一個Button元素 ,類似于一個Rectangle{}的聲明。

 

  1. Code In FileMenu.qml:  
  2.  
  3.      Row{  
  4.          anchors.centerIn: parent  
  5.          spacing: parent.width/6  
  6.  
  7.          Button{  
  8.              id: loadButton  
  9.              buttonColor: "lightgrey"  
  10.              label: "Load"  
  11.          }  
  12.          Button{  
  13.              buttonColor: "grey"  
  14.              id: saveButton  
  15.              label: "Save"  
  16.          }  
  17.          Button{  
  18.              id: exitButton  
  19.              label: "Exit"  
  20.              buttonColor: "darkgrey"  
  21.  
  22.              onButtonClick: Qt.quit()  
  23.          }  
  24.      } 

在FileMenu.qml中,我們聲明了三個Button元素。它們在一個Row元素里,它作為定位器將它的孩子們沿著一個垂直的行安放。Button的聲明在Button.qml中,與上節我們用到的Button.qml是一樣的。在新創建的按鈕里可以聲明綁定新的屬性,實際上也覆蓋了Button.qml中的屬性集。當exitButton按鈕被點擊時,窗口會被退出并關閉。注意,除了exitButton內的onButtonClick handler會被調用之外,Button.qml內的也會被調到。

Qt Quick初體驗QML編程

Rectangle內聲明的Row,創建了一個容納一行button的容器。這個額外的矩形創造了一種在菜單內組織一行button的間接方法。

現階段,編輯菜單的聲明非常簡單,有三個標簽分別是Copy、Paste和Select All的按鈕。

Qt Quick初體驗QML編程

裝備了導入和定制之前生成的組件的知識,現在我們可以將這些菜單頁組合成一個菜單欄——包含用來選擇菜單的按鈕,并且看看那我們怎樣使用QML組織數據。

Implementing a Menu Bar

我們的文本編輯器程序需要一種使用菜單欄顯示菜單的方法。使用菜單欄可以切換不同的菜單,用戶可以選擇要顯示的菜單。菜單切換意味著這些菜單比單單在一行中顯示出來需要更多的結構。QML使用models和views來構建數據并顯示這些結構化的數據。

Using Data Models and Views

QML有不同的數據views可以顯示數據models。我們的菜單欄會將菜單顯示在一個列表中,這個列表有一個顯示一行菜單名的標題。我們可以在VisualItemModel中聲明一個菜單列表。VisualItemModel包含了像Rectangle和導入的UI元素這樣的views的items。其他的像ListModel元素這樣的model類型需要一個代理來顯示它們的數據。

我們在menuListModel中聲明了兩個可視的items,FileMenu 和EditMenu。我們定制了兩個菜單,并使用ListView來顯示。 MenuBar.qml包含了QML聲明和一個在EditMenu.qml中定義的簡單的編輯菜單。

  1. CodeVisualItemModel{  
  2.          id: menuListModel  
  3.          FileMenu{  
  4.              width: menuListView.width  
  5.              height: menuBar.height  
  6.              color: fileColor  
  7.          }  
  8.          EditMenu{  
  9.              color: editColor  
  10.              width:  menuListView.width  
  11.              height: menuBar.height  
  12.          }  
  13.      }  

ListView元素將按照一個delegate來顯示一個model。這個delegate可能聲明在一個Row元素或則grid元素里顯示的model items。我們的menuListModel已經有可見的items,因為,我們就不需要一個delegate了。

 

  1. ListView{  
  2.          id: menuListView  
  3.          //Anchors are set to react to window anchors  
  4.          anchors.fill:parent  
  5.          anchors.bottom: parent.bottom  
  6.          width:parent.width  
  7.          height: parent.height  
  8.          //the model contains the data  
  9.          model: menuListModel  
  10.          //control the movement of the menu switching  
  11.          snapMode: ListView.SnapOneItem  
  12.          orientation: ListView.Horizontal  
  13.          boundsBehavior: Flickable.StopAtBounds  
  14.          flickDeceleration: 5000  
  15.          highlightFollowsCurrentItem: true  
  16.          highlightMoveDuration:240  
  17.          highlightRangeMode: ListView.StrictlyEnforceRange  
  18.      } 

另外,ListView繼承自Flickable,使list可以響應鼠標拖拽和其他手勢。上面代碼的最后一部分設置了Flickable屬性,對view創建了我們期待的閃爍移動。特別是highlightMoveDuration屬性改變閃爍轉變的過渡時間。highlightMoveDuration的值越大菜單切換越慢。

ListView通過index來維護所有的model的items,通過index被聲明的順序,可以訪問model中的每一個可見item。改變currentIndex實際上改變了ListView中的高亮item。我們的菜單欄的標題以實例證明了這種效果。一行里有兩個按鈕,當被點擊時,兩個都會改變當前的菜單。當點擊fileButton時,會改變當前的菜單到文件菜單,index為0的原因是,FileMenu 在menuListModel中是第一個聲明的。同樣地,點擊editButton時改變當前菜單到EditMenu。

labelList的zvalue為1,表示它顯示在菜單欄前面。z值高的items顯示在低z值的前。缺省的z值是0.

  1. Rectangle{  
  2.          id: labelList  
  3.          ...  
  4.          z: 1  
  5.          Row{  
  6.              anchors.centerIn: parent  
  7.              spacing:40  
  8.              Button{  
  9.                  label: "File"  
  10.                  id: fileButton  
  11.                  ...  
  12.                  onButtonClick: menuListView.currentIndex = 0 
  13.              }  
  14.              Button{  
  15.                  id: editButton  
  16.                  label: "Edit"  
  17.                  ...  
  18.                  onButtonClick:    menuListView.currentIndex = 1 
  19.              }  
  20.          }  
  21.      }  

我們剛剛建立的菜單欄可以通過輕打或者點擊頂端的菜單名字訪問菜單。切換菜單的屏幕感覺起來直觀而且反應很快。

Qt Quick初體驗QML編程

小結:Qt Quick初體驗QML編程的內容介紹完了,完成了一個簡單的菜單的小實例,希望通過本篇的實例,能對你有所幫助!!!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-24 17:22:29

Qt Quick QML

2011-06-10 11:05:05

Qt Quick QML

2011-06-20 14:58:53

QT BasicExcel

2011-06-16 17:19:33

Qt Meego

2011-06-07 17:35:39

iphone 多線程

2021-08-12 14:33:20

Python多線程編程

2011-03-11 14:43:41

Qt-QuickQML

2011-05-16 14:12:30

QuickWidgetQML

2009-08-01 09:06:35

UbuntuOneLinux開源操作系統

2009-03-09 15:12:39

XenServer安裝

2011-06-10 11:24:08

Qt Quick Designer

2011-07-28 14:19:12

iPhone 網絡編程 聊天程序

2011-06-24 11:03:31

Qt 多線程 線程

2023-07-15 08:01:38

2010-11-22 10:31:17

Sencha touc

2011-05-30 15:12:10

App Invento 初體驗

2011-08-30 15:32:08

QtQuickQML

2011-07-01 14:39:08

Qt Quick

2023-12-21 15:37:31

編程語言FortranC語言

2009-11-30 10:09:02

谷歌Chrome OS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人av一区二区三区 | 久久蜜桃资源一区二区老牛 | 欧美精品一区二区免费视频 | 色狠狠桃花综合 | 狠狠色综合久久婷婷 | 国产成视频在线观看 | 国产精品极品美女在线观看免费 | 精品国产免费一区二区三区演员表 | 亚洲一区中文字幕 | 伊人久久免费 | 成人网视频 | 毛片av免费看| 精品国产乱码久久久久久丨区2区 | 精品国产欧美一区二区三区成人 | 亚洲精品一区二区三区在线 | 色接久久| 逼逼网 | 日韩一区二区在线播放 | 国产精品毛片一区二区在线看 | 日本一区不卡 | 日本精品视频在线 | 日韩免费在线观看视频 | 成人在线播放 | 国产乱xxav | 精品一区二区三区91 | 日本不卡一区二区三区 | 欧美精品在线一区二区三区 | 亚洲在线一区二区 | 日韩国产一区二区三区 | 欧美精品一区在线 | 久久99精品久久久 | 久久成人国产 | 婷婷桃色网 | 精品一二区| 福利视频亚洲 | 免费在线成人 | 亚洲美女视频 | 国产欧美精品在线 | 亚洲成人精品国产 | 成人av免费 | 国产精品爱久久久久久久 |