【QML之·基礎語法概述】

系列文章目錄


文章目錄

  • 前言
  • 一、QML基礎語法
  • 二、屬性
  • 三、腳本
  • 四、核心元素類型
    • 4.1 元素可以分為視覺元素和非視覺元素。
    • 4.2 Item
      • 4.2.1 幾何屬性(Geometry):
      • 4.2.2 布局處理:
      • 4.2.3 鍵處理:
      • 4.2.4 變換
      • 4.2.5 視覺
      • 4.2.6 狀態定義
    • 4.3 Rectangle
      • 4.3.1 顏色
    • 4.4 Text
    • 4.5 Image
    • 4.6 MouseArea
  • 五、實例演示
  • 總結


前言

  • QML是一種用于描述對象如何相互關聯的聲明式語言。
  • QtQuick是一個基于QML的框架。

一、QML基礎語法

  • import語句導入一個模塊。qt6 可以不寫版本號,自動加載最高版本的模塊。
  • 對于單行注釋,可以使用//,對于多行注釋,可以通過/**/進行注釋。就像在C/C++和JavaScript中一樣
  • 每個QML文件都需要有一個唯一的根元素,就像HTML一樣
  • 元素聲明形式為:type{ }
  • 元素可以有屬性,形式為:name:value
  • QML文檔中的任意元素可以通過使用其id(不帶引號的標識符)進行訪問
  • 元素可以嵌套,這意味著父元素可以有千元去子元素可以使用parent關鍵字訪問父元素

二、屬性

  • 屬性是一個簡單的鍵值對,例如:width:100; text: ‘Greetings’ ; color: ‘#FF0000’
  • 屬性具有類型,并且可以具有初始值。
  1. id是用于引用QML文件(在QML中稱為"document”)中的元素。id在文檔中必須是唯一的,不能重置為其他值。(類似于C++的引用。)
  2. 屬性可以設置值,具體取決于其類型。如果沒有為屬性指定值,將使用默認初始值。
  3. 屬性可以依賴于一個或多個其他屬性。這稱為綁定
  4. 可以使用property限定符向元素添加新屬性,后跟類型、名稱和可選的初始值( property<類型><名稱>:<值>) 。
  5. 聲明屬性的另一種重要方式是使用別名關鍵字(property alias≤名稱>:<引用>)。
  6. 基于int的值將自動轉換為字符串類型。每次times屬性更改時都會更新文本。
  7. 編寫grouped property的另一種方法是font{family:“Ubuntu”; pixelSize:24}。
  8. 快速切換焦點。
  9. 可以為屬性提供處理程序。屬性更改后被調用。

三、腳本

  • QML和JavaScript(也稱為ECMAScript)是好朋友。
  1. 也可以使用箭頭函數((text)=> {})。
  2. 當用戶按下了鍵盤上的空格鍵,調用JavaScript函數increment() 。
  3. 以函數name(){ …}的形式定義JavaScript函數,它增加了計數器。每次SpacePress遞增時,綁定屬性也將更新。

四、核心元素類型

4.1 元素可以分為視覺元素和非視覺元素。

  • 視覺元素(如Rectangle)具有幾何形狀。
  • 非視覺元素(Timer)提供一般功能,通常用于控制視覺元素。

4.2 Item

ltem是所有視覺元素的基礎元素,因此所有其他視覺元素都從ltem繼承。 它本身
并不繪制任何東西,但定義了所有視覺元素的共同屬性:

4.2.1 幾何屬性(Geometry):

  • x、y: 用于定義元素展開的左上角位置
  • z: 用于定義堆疊順序
  • width、height: 用于表示范圍

4.2.2 布局處理:

  • anchors:(左、右、上、下、垂直和水平中心)相對于其他元素進行定位。
    • 可選項margins

4.2.3 鍵處理:

  • KeyKeyNavigation屬性用于控制鍵處理
  • focus屬性啟用鍵處理

4.2.4 變換

  • scalerotate變換以及x、y、z變換的通用transform屬性列表,以及transformOrigin。

4.2.5 視覺

  • opacity用于控制透明度,visible用于顯示/隱藏元素,clip用于限制對元素邊界的繪制操作,smooth用于增強渲染質量。

4.2.6 狀態定義

  • states用于動畫化狀態更改。
    • 包含所有支持的狀態列表,當前state屬性和transitions 列表屬性,

4.3 Rectangle

Rectangle擴展了Item,為其添加填充顏色。此外,還支持border.colorborder.width。要創建圓角矩形,可以使用radius屬性。

4.3.1 顏色

  • gradient用于填充漸變顏色
    • position標記y軸上的位置(o=頂部,1=底部)

4.4 Text

  • 要顯示文本,可以使用Text元素。它最顯著的屬性是字符串類型的text屬性。元素根據給定的文本和使用的字體(例如font.family、font.pixelSize等)計算其初始寬度和高度。要更改文本的顏色,只需使用color屬性。
  • 可以使用horizontalAlignmentverticalAlignment屬性對齊文本。使用stylestyleColor允許以輪廓、凸起和凹陷模式渲染文本。
  • elide屬性允許將省略符位置設置為文本的左側、右側或中間。
  • 例如:A very … long text
  • 如果不希望省略符模式的"…"出現,但仍希望看到全文,可以使用wrapMode屬性包裝文本(僅在顯式的設置了寬度時有效)

4.5 Image

lmage元素能夠以各種格式(例如PNG、JPG、GIF、BMP、WEBP)顯示圖像。有關支持的圖像格式的完整列表,請參閱Qt文檔。除了提供圖像URL的source屬性外,它還包含一個控制大小調整行為的fillMode

說明
lmage.Stretch默認值。縮放圖像以適合項目
Image.PreserveAspectFit圖像均勻縮放以適應而不裁剪
Image.PreserveAspectCrop圖像均勻縮放以填充,必要時進行裁剪
Image.Tile水平和垂直復制圖像
lmage.TileVertically圖像水平拉伸并垂直平鋪
lmage.TileHorizontally圖像被垂直拉伸并水平平鋪Image.Pad:圖像未轉換
  • 使用PreserveApectCrop的圖像元素還應啟用clip,以避免在圖像邊界之外渲染圖像數據。
  • 可以在C++中使用QQuicklmageProviger創建自己的圖像提供程序。動態創建圖像,并利用線程加載圖像。

4.6 MouseArea

MouseArea這是一個矩形的不可見項,可以在其中捕獲鼠標事件。

五、實例演示

示例1:

import QtQuick 2.12
import QtQuick.Window 2.12Rectangle {id: rootwidth: 640; height: 480color: "#4A4A4A"Image {id: imagex: (/*root.*/parent.width - width) / 2;y: (root.height - height) / 2source: "../00_chapter1-pinwheel/images/pinwheel.png"}Text {
//        id: nametext: qsTr("大風車傻乎乎的轉!")/*x: (root.width - width) / 2;*/y: image.y + image.height + 20horizontalAlignment: Text.AlignHCenterwidth: root.widthcolor: 'white'}
}

運行結果:
在這里插入圖片描述
示例2:

import QtQuick 2.9
import QtQuick.Window 2.3Rectangle{id: rootwidth: 800;height: 800Text {// (1) identifierid: lable1// (2) set x- and y-positonx: 20;y: 20// (3) bind height to 2 * widthheight: 2 * widthRectangle {anchors.fill: parentcolor: 'yellow'z: parent.z - 1}// (4) custom propertyproperty int times: 24// (5) property aliasproperty alias anotherTimes: lable1.times// (6) set text appended by valuetext: "lable1 " + anotherTimes// (7) font is a grouped properttfont.family: "Ubuntu"font.pixelSize: 80
//        font {family: "Ubuntu";pixelSize: 24}// (8) KeyNavigation is an attached propertyKeyNavigation.tab: lable2// (9) signal handler for property changesonHeightChanged: console.log('height:',height)// (10) focus is need to receive key eventsfocus: true// (11) change color based on focus valuecolor: focus ? "green":"red"}Text {id: lable2x: lable1.x;y: lable1.y +300font{pixelSize: 80}text: qsTr("lable2")focus: !lable1.focusKeyNavigation.tab: lable1color: focus ? "green":"red"}
}

運行結果:
在這里插入圖片描述
示例3:

import QtQuick 2.9
import QtQuick.Window 2.3Rectangle{id: rootwidth: 800;height: 800Text {id: lable1color: whitex: 200;y: 200property int spacePresses: 0text: "lable1 " + spacePresses + " times"font.family: "Ubuntu"font.pixelSize: 50onTextChanged: function(text){ console.log("text changed to:",text)}
//        onTextChanged: (text) =>{console.log("text changed to:",text)}focus: trueKeys.onSpacePressed: {increment()}Keys.onEscapePressed: {lable1.text = ''}function increment(){spacePresses += 1}KeyNavigation.tab: lable1}
}

運行結果:
在這里插入圖片描述
示例4:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 640height: 480title: qsTr("Rect")Rectangle {id: rect1x: 20;y: 20width: 100; height: 100color: 'lightsteelblue'}Rectangle {id: rect2x: 140;y: 20width: 100; height: 100border.color: 'lightsteelblue'border.width: 4radius: 20}Rectangle {id: rect3x: 260;y: 20width: 100; height: 100gradient: Gradient {
//            GradientStop {position: 0.0;color: 'lightsteelblue'}
//            GradientStop {position: 1.0;color: 'slategray'}GradientStop {position: 0.0;color: 'green'}GradientStop {position: 1.0;color: 'red'}}border.color: 'lightsteelblue'border.width: 4radius: 20}Rectangle {id: rect4x: 20;y: 140width: 100; height: 100//可以使用JavaScript創建隨機顏色color: Qt.rgba(Math.random(),Math.random(),Math.random(),1)}
} 

運行結果:
在這里插入圖片描述

示例5:

Window {visible: truewidth: 640height: 780title: qsTr("Hello World")Text {id: text1text: "明天你好!"color: "#303030"font.family: "Ubuntu"font.pixelSize: 30}Text {y: text1.height+50width: 180elide: Text.ElideMiddle //文字縮略顯示屬性設置text: "今天你過的好嗎???????????"font.family: "Ubuntu"font.pixelSize: 80style: Text.SunkenstyleColor: '#000000'color: 'white'
//        wrapMode: Text.WordWrap //文字超過設置寬度換行(符號不屬于文字范疇)wrapMode: Text.WrapAtWordBoundaryOrAnywhere //符號也會換行}
}

運行結果:
在這里插入圖片描述

在這里插入圖片描述
示例6:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 800height: 600title: qsTr("Image")Image {id: image1width: 300; height: 300source: "./image/triangle.png"}Image {
//        id: image1x: image1.x + image1.width + 20width: image1.width / 2; height: 300source: "./image/triangle.png"
//        fillMode: Image.Stretch             //默認值。縮放圖像以適合項目
//        fillMode: Image.PreserveAspectCrop  //圖像均勻縮放以填充,必要時進行裁剪
//        clip: truefillMode: Image.PreserveAspectFit     //圖像均勻縮放以適應而不裁剪(長寬哪個小,以哪個為基準)}
}

運行結果:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
示例7:

import QtQuick 2.9
import QtQuick.Window 2.3Window {visible: truewidth: 800height: 700title: qsTr("MouseArea")Rectangle {id: rect1x: 10;y: 10width: 280;height: 280color: "lightsteelblue"MouseArea{width: parent.width; height: parent.heightonClicked: rect2.visible = !rect2.visible}}Rectangle {id: rect2x: 300;y: 10width: 280;height: 280border.color: "lightsteelblue"border.width: 5}
}

運行結果:
在這里插入圖片描述


總結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43965.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1Panel服務器面板支持哪些Linux操作系統?

1Panel面板支持的Linux操作系統版本有哪些&#xff1f;1Panel支持主流Linux發行版本&#xff0c;包括RedHat、CentOS、Ubuntu、Debian、openEuler及其他國產操作系統。支持多種服務器架構&#xff0c;碼筆記整理詳細1Panel面板支持的服務器系統、架構、內存和瀏覽器支持&#x…

【界面態】霍爾效應表征氮化對SiC/SiO2界面陷阱的影響

引言 引言主要介紹了硅碳化物&#xff08;SiC&#xff09;金屬-氧化物-半導體場效應晶體管&#xff08;MOSFETs&#xff09;作為新一代高壓、低損耗功率器件的商業化背景。SiC MOSFETs因其優越的電氣特性&#xff0c;在高電壓和高溫應用領域具有巨大的潛力。然而&#xff0c;盡…

綜合安全防護

題目 1,DMZ區內的服務器,辦公區僅能在辦公時間內(9:00-18:00)可以訪問,生產區的設備全天可以訪問. 2,生產區不允許訪問互聯網,辦公區和游客區允許訪問互聯網 3,辦公區設備10.0.2.10不允許訪問DMz區的FTP服務器和HTTP服務器,僅能ping通10.0.3.10 4,辦公區分為市場部和研發部,研…

Redis 數據過期及淘汰策略

Redis 數據過期及淘汰策略 過期策略 定時過期 在設置key?的過期時間的同時&#xff0c;為該key?創建一個定時器&#xff0c;讓定時器在key?的過期時間來臨時&#xff0c;對key進行刪除。到過期時間就會立即清除。該策略可以立即清除過期的數據&#xff0c;對內存很友好&a…

動態數據庫設計

動態數據庫設計是一種靈活的方法&#xff0c;用于構建能夠適應不斷變化的數據需求的數據庫結構。它強調在不頻繁修改數據庫表結構的前提下&#xff0c;有效管理和存儲多樣化的數據。以下是實現動態數據庫設計的一些關鍵技術點和策略&#xff1a; 實體-屬性-值&#xff08;EAV&a…

Rockchip RK3588 - Rockchip Linux SDK腳本分析

---------------------------------------------------------------------------------------------------------------------------- 開發板 &#xff1a;ArmSoM-Sige7開發板eMMC &#xff1a;64GBLPDDR4 &#xff1a;8GB 顯示屏 &#xff1a;15.6英寸HDMI接口顯示屏u-boot &a…

LeetCode //C - 214. Shortest Palindrome

214. Shortest Palindrome You are given a string s. You can convert s to a palindrome by adding characters in front of it. Return the shortest palindrome you can find by performing this transformation. Example 1: Input: s “aacecaaa” Output: “aaacec…

如何在JetBrains中寫Codeforce?

目錄 前言 正文 leetcode 個人喜好 參考資料 具體操作步驟 尾聲 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1f46f; I’m studying in University of Nottingham Ningbo China&#x1f4…

Python函數 之 模塊和包

1.模塊 1, 在Python 中, 每個以 .py 結尾的 Python 代碼?件 都可以稱為是?個模塊。 2, 在模塊中 別?書寫好的功能(變量, 函數, 類)&#xff0c;我們可以拿來直接使?。 3, 我們自己寫的代碼文件&#xff0c; 想要作為模塊讓別?使?, 你的代碼?件名(模塊名) 滿足標識符的規…

物流工業三防平板實時跟蹤貨物位置和狀態

在當今全球化和高度數字化的商業環境中&#xff0c;物流行業的高效運作對于企業的成功和經濟的繁榮至關重要。貨物的準確、實時跟蹤不僅能提高物流效率&#xff0c;還能增強客戶滿意度&#xff0c;降低運營成本。物流工業三防平板的出現&#xff0c;為實現貨物位置和狀態的實時…

全網最適合入門的面向對象編程教程:12 類和對象的 Python 實現-Python 使用 logging 模塊輸出程序運行日志

全網最適合入門的面向對象編程教程&#xff1a;12 類和對象的 Python 實現-Python 使用 logging 模塊輸出程序運行日志 摘要&#xff1a; 本文主要介紹了日志的定義和作用&#xff0c;以及 Python 內置日志處理的 logging 模塊&#xff0c;同時簡單說明了日志等級和 logging …

【人工智能】-- 搜索技術(狀態空間法)

個人主頁&#xff1a;歡迎來到 Papicatch的博客 課設專欄 &#xff1a;學生成績管理系統 專業知識專欄&#xff1a; 專業知識 文章目錄 &#x1f349;引言 &#x1f348;介紹 &#x1f349;狀態空間法 &#x1f348;狀態空間的構成 &#x1f34d;狀態 &#x1f34d;算符…

搜維爾科技:觸覺反饋數據手套CyberGlove擊鼓測試

觸覺反饋數據手套CyberGlove擊鼓測試 搜維爾科技&#xff1a;觸覺反饋數據手套CyberGlove擊鼓測試

辦公助手推薦?

辦公助手來啦&#xff01;? 辦公助手來啦&#xff01;?&#x1f31f; 主要亮點&#x1f4dd; 全新PDF編輯器&#x1f3a8; 豐富的幻燈片版式&#x1f30d; 改進的從右至左顯示&#x1f310; 新增本地化選項 &#x1f4ca; 應用場景在線辦公套件&#x1f4f1; 多平臺支持&…

IEC62056標準體系簡介-1.引言

隨著微電子技術和信息技術的發展&#xff0c;電力系統由智能計量儀表、自動化裝置、現代通信設備等組成的各類系統逐步取代過去由感應系計量表計、手動裝置、人工操作等組成的運行模式。為滿足電力市場變革和用戶管理中的抄表&#xff08;含自動&#xff09;、用戶服務、價格表…

torch.autograd.Function自定義前向傳播和反向傳播

torch.autograd.Function 是 PyTorch 提供的一個接口&#xff0c;用于自定義前向傳播和反向傳播的操作。自定義操作需要繼承 torch.autograd.Function 并重載 forward 和 backward 方法。 下面是一個簡單的示例&#xff0c;展示如何自定義一個平方操作的前向傳播和反向傳播。 …

idea創建dynamic web project

由于網課老師用的是eclipse,所以又得自己找教程了…… 解決方案&#xff1a; https://blog.csdn.net/Awt_FuDongLai/article/details/115523552

20240709每日后端--------最優解決Invalid bound statement (not found)

目標 最優解決Invalid bound statement (not found) 步驟 1、打包 2、查看target下是否成雙成對出現 3、核對無誤后&#xff0c;即可解決問題。

軟考高級里《系統架構設計師》容易考嗎?

我還是22年通過的架構考試。系統架構設計師屬于軟考高級科目&#xff0c;難度比初級和中級都要大&#xff0c;往年的通過率也比較低&#xff0c;一般在10-20%左右。從總體來說&#xff0c;這門科目確實是不好過的&#xff0c;大家如果想要備考系統架構設計師的話&#xff0c;還…

Kithara和OpenCV (一)

Kithara使用 OpenCV 目錄 Kithara使用 OpenCV簡介需求和支持的環境構建 OpenCV 庫使用 CMake 進行配置以與 Kithara 一起工作 使用 OpenCV 庫設置項目運行 OpenCV 代碼圖像采集和 OpenCV自動并行化限制和局限性1.系統建議2.實時限制3.不支持的功能和缺失的功能4.顯示 OpenCV 對…