• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            [教程] QML基本語法 [轉]

            Posted on 2011-07-06 22:03 RTY 閱讀(1460) 評論(0)  編輯 收藏 引用 所屬分類: Qt轉載隨筆



            QML是什么?

            QML 是一中聲明式語言,用來描述應用程序接口的――是什么樣,有怎樣的行為。在QML中,一個用戶接口被指定為帶有屬性的對象是。

            這個介紹主要面向只有很少或者沒有編碼經驗的人。在QML中,JavaScript作為一種腳本語言被使用。因此在深入學習QML之前,也許你會想要去學一些關于JavaScript的知識(JavaScript: The Definitive Guide)。另外,對像HTML和CSS這樣的網頁技術有一些基礎的了解也是相當有幫助的,但這些都不是必須的。

            QML 的基本語法
            QML看起來像這樣
            1. import Qt 4.7
            2. Rectangle {
            3.      width: 200
            4.      height: 200
            5.      color: "blue"

            6.      Image {
            7.          source: "pics/logo.png"
            8.          anchors.centerIn: parent
            9.      }
            10. }
            復制代碼

            對象是通過類型而直接被指定的,緊隨其后的是一對大括號。對象類型總是以大寫字母開頭。在上面的例子中,存在兩個對象Rectangle和Image。在大括號之間,我們可以指定對象的相關信息,例如它的屬性。屬性是通過“property: value”這樣的方式被呈現的。在上面的例子中,我們可以看到Image擁有一個屬性叫做source,它被分配了一個值叫做"pics/logo.png"。屬性和值被冒號分隔。

            屬性可以被一行行指定:

            1. Rectangle {
            2.      width: 100
            3.      height: 100
            4. }
            復制代碼

            同時也可以在一個單行上指定多個屬性:

            1. Rectangle { width: 100; height: 100 }
            復制代碼

            當多個property/value對被指定在一個單行上時,他們需要通過分號來分隔。

            import聲明是為了導入包含所有標準的QML元素的Qt模塊。沒有這個導入聲明,Rectangle和Image元素都將不能被使用。

            表達式

            除了直接給屬性指定值之外,你也可以像在JavaScript中一樣通過表達式來指定。

            1. Rotation {
            2.      angle: 360 * 3
            3. }
            復制代碼

            這些表達式可以包含其他對象和屬性,這樣子的操作將會產生一個綁定關系,當這個表達式的值發生改變時,已經通過表達式指定了的屬性的值也會自動更新到那個值。

            1. Item {
            2.      Text {
            3.          id: text1
            4.          text: "Hello World"
            5.      }
            6.      Text {
            7.          id: text2
            8.          text: text1.text
            9.      }
            10. }
            復制代碼

            在上面的這個例子中,text2對象將會顯示和text1一樣的文字.如果text1改變了,text2也會自動變化為相同的值。

            在引用其他對象時,可以通過對象的id 值,來進行引用。

            QML注釋

            QML中的注釋方式和Javascript 的相同。

            單行注釋使用//;

            多行注釋使用 /* … */ 。

            1. Text {
            2.      text: "Hello world!"/*print text*/
            3.      //opacity: 0.5
            4. }
            復制代碼
            屬性
            屬性命名

            屬性通常以小寫字符開頭(附加屬性除外)

            屬性類型

            QML支持多種屬性(具體參看QML Basic Types)。基本的屬性包括 int, real, bool, string, color和lists。

            1. Item {
            2.      x: 10.5             // a 'real' property
            3.      ...
            4.      state: "details"    // a 'string' property
            5.      focus: true         // a 'bool' property
            6. }
            復制代碼

            QML的屬性是屬于類型安全的,也就是說屬性的類型必須和所分配的值是相同的。例如,Item的x屬性是一個real,如果你想要給他分配一個string值,就會得到一個錯誤。

            1. Item {
            2.      x: "hello"  // illegal!
            3. }
            復制代碼
            id屬性

            每個對象都可以指定一個專門的屬性叫做id,這個屬性的值必須是唯一的。在同一個QML文檔中不能有相同的id值。通過指定一個唯一可用的id,對象就可以被其他對象和腳本引用。

            1. Item {
            2.      Rectangle {
            3.          id: myRect
            4.          width: 100
            5.          height: 100
            6.      }
            7.      Rectangle {
            8.          width: myRect.width
            9.          height: 200
            10.      }
            11. }
            復制代碼

            ps:id必須以小寫字母或者下劃線開頭,并且不能包含除字母、數字和下劃線以外的其他字符。

            List屬性

            List屬性看起來像這樣

            1. Item {
            2.      children: [
            3.          Image {},
            4.          Text {}
            5.      ]
            6. }
            復制代碼

            list有包含在方括號,list中的屬性以逗號來分隔。如果只有一個屬性,可以省略方括號。

            1. Image {
            2.      children: Rectangle {}
            3. }
            復制代碼
            缺省屬性

            每個對象類型可以指定一個list或者或者對象屬性作為缺省屬性。如果一個屬性已經被聲明為缺省屬性,那么該屬性的標簽就可以被省略。

            示例代碼
            1. State {
            2.      changes: [
            3.          PropertyChanges {},
            4.          PropertyChanges {}
            5.      ]
            6. }
            復制代碼
            可以被簡化為
            1. State {
            2.      PropertyChanges {}
            3.      PropertyChanges {}
            4. }
            復制代碼
            因為changes是State類型的缺省屬性。
            組屬性
            在一些示例中屬性會構成一個邏輯上的小組,并且通過點(“.”)或者組標記去使用它。
            組屬性可以被寫成以下形式:
            1. Text {
            2.      font.pixelSize: 12
            3.      font.bold: true
            4. }
            復制代碼
            或者
            1. Text {
            2.      font { pixelSize: 12; bold: true }
            3. }
            復制代碼
            附加屬性

            附加屬性的意思就是通過一些對象附加一些屬性到另一個對象上。附加屬性的格式如Type.property ,在這里Type是這個附加屬性元素的類型。

            1. Component {
            2.      id: myDelegate
            3.      Text {
            4.          text: "Hello"
            5.          color: ListView.isCurrentItem ? "red" : "blue"
            6.      }
            7. }
            8. ListView {
            9.      delegate: myDelegate
            10. }
            復制代碼

            ListView元素附加ListView.isCurrentItem這個屬性到它創建的每一個對象中。

            另一個附加屬性的例子是Keys元素通過附加屬性來處理任何可見Item的key press事件,例如:

            1. Item {
            2.      focus: true
            3.      Keys.onSelectPressed: console.log("Selected")
            4. }
            復制代碼
            信號處理器

            信號處理器允許通過事件來響應動作。舉個例子來說,MouseArea元素擁有信號處理器來處理鼠標press、release和click:

            1. MouseArea {
            2.      onPressed: console.log("mouse button pressed")
            3. }
            復制代碼

            所有的信號處理器都是以“on”開頭的。

            一些信號處理器還包含有選項參數,例如MouseArea onPressed這個信號處理器就有mouse這個參數:

            1. MouseArea {
            2.      acceptedButtons: Qt.LeftButton | Qt.RightButton
            3.      onPressed: if (mouse.button == Qt.RightButton) console.log("Right mouse button pressed")
            4. }
            復制代碼

            中文字幕久久精品| 久久综合狠狠综合久久| 国产精品天天影视久久综合网| 九九久久精品无码专区| 久久亚洲国产午夜精品理论片| 亚洲精品无码久久久久久| 2021久久精品免费观看| 亚洲综合久久久| 99久久香蕉国产线看观香| 亚洲精品久久久www| 久久只这里是精品66| 欧美日韩精品久久久免费观看| 亚洲人成无码网站久久99热国产| 色婷婷综合久久久久中文字幕| 久久伊人中文无码| 久久久www免费人成精品| 精品久久亚洲中文无码| 久久午夜无码鲁丝片| 国内精品久久九九国产精品| 青青热久久综合网伊人| 久久久久久国产精品无码下载| 四虎亚洲国产成人久久精品| 无码国内精品久久综合88 | 久久成人国产精品免费软件| 久久婷婷五月综合国产尤物app| 亚洲精品无码成人片久久| 狠狠色丁香婷综合久久| 欧美一级久久久久久久大| 久久人妻无码中文字幕| 狠狠狠色丁香婷婷综合久久五月 | 青青草国产精品久久久久| 四虎国产精品免费久久久| 久久久久国产一区二区三区| 无码8090精品久久一区| 国产亚洲综合久久系列| 久久久久国产精品嫩草影院 | 中文字幕久久欲求不满| 久久亚洲熟女cc98cm| 亚洲国产成人久久精品影视| 久久精品无码一区二区WWW| 国产福利电影一区二区三区久久老子无码午夜伦不 |