自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用一篇短文,帶你進(jìn)入 QML 的美妙世界

開(kāi)發(fā) 后端
QML 是一種用于描述應(yīng)用程序用戶界面的聲明式編程語(yǔ)言,Qt Quick 則是 QML 應(yīng)用的標(biāo)準(zhǔn)庫(kù)。

[[396122]]

本文轉(zhuǎn)載自微信公眾號(hào)「老吳的嵌入式之旅」,作者吳偉東Jack。轉(zhuǎn)載本文請(qǐng)聯(lián)系老吳的嵌入式之旅公眾號(hào)。

大家好,我是老吳。

今天用幾個(gè)小例子帶大家快速入門(mén) QML 編程。

0. 什么是 QML?

QML 是一種用于描述應(yīng)用程序用戶界面的聲明式編程語(yǔ)言,Qt Quick 則是 QML 應(yīng)用的標(biāo)準(zhǔn)庫(kù)。

我為什么選擇學(xué)習(xí) QML?

  • 易上手;
  • 可讀性高;
  • 學(xué)習(xí)資料多,有各種文檔和示例;
  • 跨平臺(tái);
  • 性能不差,流暢度還行。

1. 如何創(chuàng)建 QML 應(yīng)用?

舉個(gè)栗子:

在 Qt Creator 依次點(diǎn)擊:

-> File -> New File or Project

-> Applications -> Qt Quick Application

然后一路點(diǎn)擊 next 直到 finish 。

修改 main.qml :

  1. // 文件 main.qml 
  2.  
  3. import QtQuick 2.12 
  4. import QtQuick.Window 2.12 
  5.  
  6. Window { 
  7.     visible: true 
  8.     width: 320 
  9.     height: 240 
  10.     title: qsTr("Hello World"
  11.  
  12.     Rectangle { 
  13.         width: 320 
  14.         height: 240 
  15.         color: "green" 
  16.  
  17.         Text { 
  18.             anchors.centerIn: parent 
  19.             text: "Hello, World!" 
  20.         } 
  21.     } 

這樣就完成了你的第一個(gè) QML 程序,它的作用是在一個(gè)綠色的長(zhǎng)方形塊上顯示 "Hello World!"。

運(yùn)行效果:

這里的 Window、Rectangle、Text 都是 QML 里的類(lèi)型,術(shù)語(yǔ) 為 QML Type。

進(jìn)一步了解 QML Type:

The QML Type System

QML Basic Types

QML Object Types

2. 使用 Qt Quick Controls

什么是 Qt Quick Controls?

Qt Quick Controls 就是一組控件,用于在 Qt Quick 中構(gòu)建完整的界面。

舉個(gè)例子:

  1. // 文件 main.qml 
  2.  
  3. import QtQuick 2.12 
  4. import QtQuick.Controls 2.12 
  5.  
  6. ApplicationWindow { 
  7.     visible: true 
  8.     title: qsTr("Hello World"
  9.     width: 320 
  10.     height: 240 
  11.  
  12.     menuBar: MenuBar { 
  13.         Menu { 
  14.             title: qsTr("File"
  15.             MenuItem { 
  16.                 text: qsTr("&Open"
  17.                 onTriggered: console.log("Open action triggered"); 
  18.             } 
  19.             MenuItem { 
  20.                 text: qsTr("Exit"
  21.                 onTriggered: Qt.quit(); 
  22.             } 
  23.         } 
  24.     } 
  25.  
  26.     Button { 
  27.         text: qsTr("Hello World"
  28.         anchors.horizontalCenter: parent.horizontalCenter 
  29.         anchors.verticalCenter: parent.verticalCenter 
  30.     } 

這里的 ApplicationWindow 、MenuBar、Button 首先是 QML Type,并且它們是 Qt Quick Controls 里提供的控件。

  • ApplicationWindow 是一個(gè)通用的窗口控件;
  • MenuBar 是一個(gè)菜單欄控件;
  • Button 是按鍵控件;

運(yùn)行效果:

進(jìn)一步了解 Qt Quick Controls:

Qt Quick Layouts - Basic Example

Qt Quick Controls - Gallery

3. 處理用戶輸入

使用 QML 設(shè)計(jì)界面的一大優(yōu)點(diǎn)是,

它允許設(shè)計(jì)人員使用簡(jiǎn)單的 JavaScript 表達(dá)式定義應(yīng)用程序?qū)κ录姆磻?yīng)。

在 QML 中,我們將事件稱為信號(hào),并且這些信號(hào)由信號(hào)處理程序處理。

舉個(gè)例子:

  1. // 文件 main.qml 
  2.  
  3. ApplicationWindow { 
  4.     ... 
  5.  
  6.     Rectangle { 
  7.         width: 100 
  8.         height: 100 
  9.         color: "red" 
  10.         anchors.verticalCenter: parent.verticalCenter 
  11.  
  12.         Text { 
  13.             anchors.centerIn: parent 
  14.             text: "Hello, World!" 
  15.         } 
  16.  
  17.         TapHandler { 
  18.             onTapped: parent.color = "green" 
  19.         } 
  20.     } 

運(yùn)行效果:

TapHandler 用于響應(yīng)觸摸屏或者鼠標(biāo)的點(diǎn)擊,這里我們使用它來(lái)處理對(duì)綠色方塊的點(diǎn)擊事件。

進(jìn)一步了事件處理:

Signal and Handler Event System

4. 屬性綁定

什么是屬性綁定?

對(duì)象及其屬性構(gòu)成了 QML 文件中定義的圖形界面的基礎(chǔ)。

QML 允許屬性彼此之間以各種方式綁定,從而實(shí)現(xiàn)高度動(dòng)態(tài)的用戶界面。

舉個(gè)例子:

  1. // 文件 main.qml 
  2.  
  3. ApplicationWindow { 
  4.     Rectangle { 
  5.         width: 100 
  6.         height: 100 
  7.         color: "red" 
  8.  
  9.         Rectangle { 
  10.             width: parent.width / 2 
  11.             height: parent.height / 2 
  12.             color: "green" 
  13.         } 
  14.     } 

運(yùn)行效果:

子矩形的長(zhǎng)寬綁定了到父矩形的幾何形狀。

如果父矩形的長(zhǎng)寬發(fā)生變化,則由于屬性綁定,子矩形的長(zhǎng)寬將自動(dòng)更新。

5. 自定義 QML Type

每個(gè) QML 文件都隱式地定義了一個(gè) QML type,這個(gè) QML type 可以在其他 QML 文件中重復(fù)使用。

舉個(gè)例子:

新建一個(gè) QML 文件 MessageLabel.qml:

  1. // 文件 MessageLabel.qml 
  2. import QtQuick 2.12 
  3.  
  4. Rectangle { 
  5.     height: 50 
  6.     property string message: "debug message" 
  7.     property var msgType: ["debug""warning" , "critical"
  8.     color: "black" 
  9.  
  10.     Column { 
  11.         anchors.fill: parent 
  12.         padding: 5.0 
  13.         spacing: 2 
  14.  
  15.         Text { 
  16.             text: msgType.toString().toUpperCase() + ":" 
  17.             font.bold: msgType == "critical" 
  18.             font.family: "Terminal Regular" 
  19.             color: msgType === "warning" || msgType === "critical" ? "red" : "yellow" 
  20.             ColorAnimation on color { 
  21.                 running: msgType == "critical" 
  22.                 from"red" 
  23.                 to"black" 
  24.                 duration: 1000 
  25.                 loops: msgType == "critical" ? Animation.Infinite : 1 
  26.             } 
  27.         } 
  28.  
  29.         Text { 
  30.             text: message 
  31.             color: msgType === "warning" || msgType === "critical" ? "red" : "yellow" 
  32.             font.family: "Terminal Regular" 
  33.         } 
  34.     } 
  35.  

這里可以理解為我們創(chuàng)建了一個(gè)名為 MessageLabel 的控件。

引用 MessageLabel:

  1. // 文件 main.qml 
  2. Window { 
  3.     ... 
  4.      
  5.     Column { 
  6.         ... 
  7.  
  8.         MessageLabel{ 
  9.             width: parent.width - 2 
  10.             msgType: "debug" 
  11.         } 
  12.         MessageLabel { 
  13.             width: parent.width - 2 
  14.             message: "This is a warning!" 
  15.             msgType: "warning" 
  16.         } 
  17.         MessageLabel { 
  18.             width: parent.width - 2 
  19.             message: "A critical warning!" 
  20.             msgType: "critical" 
  21.         } 
  22.     } 

運(yùn)行效果:

我們很方便地就構(gòu)造了一個(gè)名為 MessageLabel 的控件,用于實(shí)現(xiàn)不同等級(jí)的 log 打印。

到這里,相信你已經(jīng)進(jìn)入了 QML 編程的世界了,請(qǐng)開(kāi)始你自己的探索之旅吧。

 

責(zé)任編輯:武曉燕 來(lái)源: 老吳的嵌入式之旅
相關(guān)推薦

2021-07-27 08:16:35

DeepinIptablesservice文件

2021-05-20 06:57:16

RabbitMQ開(kāi)源消息

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-08-23 06:25:57

CSS 技巧animation

2022-03-11 08:32:53

C代碼代碼編輯vscode

2021-08-11 07:02:21

npm包管理器工具

2021-06-16 08:28:25

unary 方法函數(shù)技術(shù)

2022-03-10 08:31:51

REST接口規(guī)范設(shè)計(jì)Restful架構(gòu)

2025-01-17 07:00:00

2022-02-24 07:56:42

開(kāi)發(fā)Viteesbuild

2021-05-12 06:18:19

KubeBuilderOperatork8s

2021-05-17 05:51:31

KubeBuilderOperator測(cè)試

2021-05-18 05:40:27

kubebuilderwebhook進(jìn)階

2022-05-31 08:01:53

微前端巨石應(yīng)用微服務(wù)

2022-12-20 08:22:42

CommitMuation

2022-02-18 08:54:21

docker操作系統(tǒng)Linux

2022-05-05 07:40:07

maskCSS

2022-02-21 09:44:45

Git開(kāi)源分布式

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)