天天看點

QT QUICK

作者:C加加Qt技術開發老傑

 Qt Quick是Qt提供的一種進階使用者界面工具包:包括描述性語言QML、語言運作時、大量的使用者界面元素、QtCreate對QML的完美支援、QtQuick設計器、QML與C++混合程式設計支援等衆多技術

  Qt Quick是一些新UI技術的集合,主要由3部分組成:Qt Creator IDE ( 包含 Qt Quick 設計器 )、QML語言、Qt庫中的QtDeclarative子產品(Qt4)

QML是對JavaScript的一種擴充,利用一個聲明性文法,使用QML元素指定每一個使用者界面,這些元素組合在一起形成各種元件,Qt的QtDeclarative子產品實作了QML語言和對它适用的元素之間的接口,該子產品還提供了一個C++接口,可以用來在Qt/C++應用程式中加載QML檔案并與之通信(QtDeclarative Module的作用就是将QML元素與以前的标準C++類相結合)

   Qt5圖形引擎基于GPU,應用開發套件Qt Quick2(适用于觸摸屏的UI開發),增加了對C++11支援,加強了對JavaScript和QML的支援,可以混合程式設計,Qt5是Qt4漸進而平緩的更新,與Qt4高度相容

  Qt5下,QWidget系列從QtGui中被剝離出去,成為單獨的QtWidget子產品,随着Qt Quick2的引入,QtDeclarative也逐漸和QWidget系列脫離關系,在Qt5下的GUI程式設計,有兩套不同的東西:QtWidget (使用BackingStore)、QtQuick (使用Scene Graph)

  相對于Qt4,Qt5将Qt Declarative子產品分解成為與界面無關的Qt Qml和基于QML語言的一個類庫Qt Quick2.0

Qt資料領取→「連結」

第一章 QML( Qt Meta-Object Language )

------ ECMAScript、Qt對象系統、Qt Quick标準庫 

  QML是Qt Quick技術的核心與基礎,是一種簡便易學的标記性語言,用來描述一個程式的使用者界面。注:Meta-Object,元對象

  一、ECMAScript語言,僅僅是一個描述,定義了腳本語言的所有屬性、方法和對象,其他語言可以實作ECMAScript來作為功能的基礎,正如JavaScript那樣,ECMAScript描述了如下内容:文法、類型、語句、關鍵字、保留字、運算符、對象

  QML提供了,為編寫QML應用程式而量身定制的,JavaScript環境,此環境不同于浏覽器提供的主機環境或伺服器端JavaScript環境(如Node.js),比如它不提供浏覽器環境中常見的視窗對象或DOM接口,QML運作時,實作了ECMAScript語言規範标準

  二、QML文法格式非常像CSS,但又支援JavaScript形式的程式設計控制,在QML中,通過具有屬性的對象樹來表示使用者界面,每個QML基本元素都對應了一個C++類,當你寫的QML檔案被加載時,QML引擎最終會為檔案中的每一個基本類型建立一個C++類對象,這些對象被按照樹的結構組織起來

  可以使用 Qt Quick 為手機、多媒體播放器、機頂盒以及其他的便攜式裝置開發具有直覺、現代、流暢的使用者界面的應用程式

  1、QML的文法

  1.1 對象是類的執行個體

Rectangle{
    width:320;
    height:480;
    
    Image{
        source:"images/IMG_001.jpg";
        anchors.centerIn:parent;
    }
}             

  對象要用一對花括号來描述,花括号前要寫上對象的類型名字(類名),在花括号之間,是對象的屬性初始化語句

  示例QML文檔中有兩個對象:一個是Rectangle,一個是Image,它們都是Qt Quick提供的内置類

  1.2 QML支援ECMAScript表達式

Rectangle{
    width:23*10;
    height:6*80;
    color:"#121212";
}           

  1.3 在QML中注釋與C++中一樣,單行以"//"開始,多行以"/*"開始、以"*/"結束

  1.4 QML中的屬性,對應于C++中的類的成員變量

  QML文檔中使用的類型大概有三類:由QML語言本身提供的類型,由QML子產品提供的類型,導出到QML環境中的C++類型,QML中對象的屬性是有類型安全檢測的,隻能指定與屬性類型比對的值

  基本類型、id屬性、清單屬性、信号處理器、分組屬性、附加屬性

  1.4.1 QML支援的基本類型包括int、real、double、bool、string、color、list、font等等

Rectangle{
    width:320;  //int
    height:480;
    
    Button{
        id: quit;
        text: "退出"; //string
        anchors.left:openFile.right;
        anchors.leftMargin:4;
        anchors.bottom:openFile.bottom;
        z:1.5; //real
        visible: false //bool
    }
}           

  1.4.2 一個對象的id屬性是唯一的,在同一個QML檔案中不同對象的id屬性的值不能重複,當給定了一個對象的id後,可以在其他對象或腳本中通過id來引用該對象

  1.4.3 QML對象的清單屬性,類型是list,清單是包含在方括号内,以逗号分隔的多個元素的集合,清單内隻能包含QML對象,不能包含任何基本類型的字面量,非要包含,需要使用var變量,如果一個清單内隻有一個元素,也可以省略方括号

Item{
    children:[
        Text{
            text:"textOne";
        },
        Text{
            text:"textTwo";
        }
    ]
    Component.onCompleted:{
        for(var i=0; i<children.length; i++){
            console.log("text of label ", i, " : ", children[i].text);
        }
    }
}           

  1.4.4 信号處理器,等價于Qt中的槽,類似于C++中的明确定義的函數,就是ECMAScript中的代碼塊,它的名字一般是on<Signal>這種形式,比如Qt Quick中的Button有一個信号clicked(),信号處理代碼:

Rectangle{
    width:320;  //int
    height:480;
    
    Button{
        id: quit;
        text: "退出"; //string
        anchors.left: parent.left;
        anchors.bottom: parent.bottom;
        anchors.bottomMargin: 4;
        onClicked{     //信号處理器
            Qt.quit();
        }
    }
}           

  1.4.5 使用"."操作符或分組符号将相關的屬性形成一個邏輯組,分組屬性指派

  font屬性的類型本身是一個對象,這個對象又有pixelSize、bold、italic、underline等屬性,對于類型為對象的屬性值

  可以使用"."操作符展開對象的每一個成員對其指派

Text{
    font.pixelSize: 18;
    font.bold: true;
}           

  可以通過分組符号(一對花括号)把要指派的成員放在一起給它們指派

Text{
    font{
        pixelSize: 18;
        font.bold: true;
    }
}           

  1.4.6 附加屬性,是附加到一個對象上的額外的屬性,與附加屬性相似的概念還有附加信号處理器

Item{
    width:100;
    height:100;
    
    focus: true;
    Keys.enabled: false; //附加屬性
}           

  2、QML資料類型,是構成QML文檔的基礎

  2.1 基本類型:QML支援C++常見的資料類型,基本類型一般用于兩種值:單值,一個包含了一組簡單的“屬性-值”對的值,如size

  基本類型有QML預設支援的,有子產品提供的(需要導入子產品才能使用),Qt全局對象提供的一些函數操作基本類型的值

  2.2 JavaScript類型:QML引擎直接支援javaScript對象和數組,任何标準JavaScript類型可以在QML中使用var類型進行建立和存儲

  2.3 對象類型: QML對象類型,用于QML對象的執行個體化,對象類型可以通過指定類型名稱并在其後的一組大括号裡面包含相應屬性的方式聲明一個對象

  QML對象類型,繼承自QtObject,由各個子產品提供,除了導入子產品,可以自定義QML對象類型

  三、Qt Quick子產品是開發QML應用的标準庫,提供了使用QML建立使用者界面所需的一切東西,包括可視化類型、互動類型、動畫、模型與視圖、粒子特效與着色器等

文章轉自部落格園(金色省略号):https://www.cnblogs.com/GoldenEllipsis/p/16453711.html

Qt資料領取→Qt資料領取(視訊教程+文檔+代碼+項目實戰)