日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
用一篇短文,帶你進(jìn)入QML的美妙世界

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

創(chuàng)新互聯(lián)是專業(yè)的金安網(wǎng)站建設(shè)公司,金安接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行金安網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

大家好,我是老吳。

今天用幾個(gè)小例子帶大家快速入門 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. import QtQuick 2.12
  3. import QtQuick.Window 2.12
  4. Window {
  5.     visible: true
  6.     width: 320
  7.     height: 240
  8.     title: qsTr("Hello World")
  9.     Rectangle {
  10.         width: 320
  11.         height: 240
  12.         color: "green"
  13.         Text {
  14.             anchors.centerIn: parent
  15.             text: "Hello, World!"
  16.         }
  17.     }
  18. }

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

運(yùn)行效果:

這里的 Window、Rectangle、Text 都是 QML 里的類型,術(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. import QtQuick 2.12
  3. import QtQuick.Controls 2.12
  4. ApplicationWindow {
  5.     visible: true
  6.     title: qsTr("Hello World")
  7.     width: 320
  8.     height: 240
  9.     menuBar: MenuBar {
  10.         Menu {
  11.             title: qsTr("File")
  12.             MenuItem {
  13.                 text: qsTr("&Open")
  14.                 onTriggered: console.log("Open action triggered");
  15.             }
  16.             MenuItem {
  17.                 text: qsTr("Exit")
  18.                 onTriggered: Qt.quit();
  19.             }
  20.         }
  21.     }
  22.     Button {
  23.         text: qsTr("Hello World")
  24.         anchors.horizontalCenter: parent.horizontalCenter
  25.         anchors.verticalCenter: parent.verticalCenter
  26.     }
  27. }

這里的 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. ApplicationWindow {
  3.     ...
  4.     Rectangle {
  5.         width: 100
  6.         height: 100
  7.         color: "red"
  8.         anchors.verticalCenter: parent.verticalCenter
  9.         Text {
  10.             anchors.centerIn: parent
  11.             text: "Hello, World!"
  12.         }
  13.         TapHandler {
  14.             onTapped: parent.color = "green"
  15.         }
  16.     }
  17. }

運(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. ApplicationWindow {
  3.     Rectangle {
  4.         width: 100
  5.         height: 100
  6.         color: "red"
  7.         Rectangle {
  8.             width: parent.width / 2
  9.             height: parent.height / 2
  10.             color: "green"
  11.         }
  12.     }
  13. }

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

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

引用 MessageLabel:

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

運(yùn)行效果:

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

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


網(wǎng)頁(yè)名稱:用一篇短文,帶你進(jìn)入QML的美妙世界
URL鏈接:http://www.5511xx.com/article/dpgiieg.html