QML初識

目錄

一、關于QML

二、布局定位和錨點

1.布局定位

2.錨點詳解

三、數據綁定

1.基本概念

2.綁定方法

3.數據模型綁定

四、附加屬性及信號

1.附加屬性

2.信號


一、關于QML

QML是Qt框架中的一種聲明式編程語言,用于描述用戶界面的外觀和行為;Quick是Qt框架中的一個模塊,允許開發者使用QML來創建用戶界面。

特點:

  • 聲明式語法:QML采用聲明式語法,開發者只需描述界面的外觀和行為,而無需關注具體的繪制和布局細節。
  • 與JavaScript的無縫集成:QML可以與JavaScript無縫集成,利用JavaScript的強大功能進行應用程序邏輯的處理。
  • 高效的開發流程:QML將界面設計與應用程序邏輯分離,提高了開發效率。設計師可以專注于界面的設計,而開發者可以專注于應用程序的邏輯實現。
  • 豐富的組件庫:Qt Quick提供了豐富的可視化組件、交互類型、動畫、模型和視圖等,如按鈕、文本框、滑塊、菜單等,方便開發者快速構建用戶界面。
  • 高效的動畫和圖形處理能力:支持各種圖形渲染技術,如OpenGL、WebGL等,可以創建流暢的動畫和視覺吸引人的應用程序。
  • 響應式設計:控件可以自動適應不同的屏幕尺寸和設備,確保應用程序在各種設備上都能有良好的用戶體驗。

? ? ??

二、布局定位和錨點

1.布局定位

  • 手動布局:通過設置元素的xy屬性,可以將元素放置在特定的坐標位置。這種方式適用于需要精確控制元素位置的場景,但在處理復雜布局時不夠靈活。
  • 定位器布局:Qt Quick提供了幾種定位器類型,如RowColumnGridFlow,用于自動定位元素。這些定位器可以根據元素的添加順序和屬性設置,將元素排列成一行、一列、網格或流式布局。
  • 錨點布局:錨點布局是QML中最靈活的布局方式,通過指定元素的錨點屬性,可以將元素相對于其父元素或其他元素進行定位。

? ??

2.錨點詳解

每個元素都有七條錨線:左、水平中心、右、上、垂直中心、下和基線。通過設置這些錨線的屬性,可以實現元素的對齊、填充和偏移等效果。

基本錨點屬性:

  • anchors.left:將元素的左邊與指定元素的左邊對齊。
  • anchors.right:將元素的右邊與指定元素的右邊對齊。
  • anchors.top:將元素的上邊與指定元素的上邊對齊。
  • anchors.bottom:將元素的下邊與指定元素的下邊對齊。
  • anchors.horizontalCenter:將元素的水平中心與指定元素的水平中心對齊。
  • anchors.verticalCenter:將元素的垂直中心與指定元素的垂直中心對齊。
  • anchors.baseline:將元素的基線與指定元素的基線對齊。

特殊錨點屬性:

  • anchors.fill:將元素的左邊、右邊、上邊和下邊都與指定元素的對應邊對齊,實現元素的填充效果。
  • anchors.centerIn:將元素的水平中心和垂直中心都與指定元素的水平中心和垂直中心對齊,實現元素的居中效果。

錨點邊距和偏移:

  • 可以通過leftMarginrightMargintopMarginbottomMargin屬性設置元素的錨點邊距,以指定元素與錨點之間的空白空間量。
  • 還可以使用horizontalCenterOffsetverticalCenterOffset屬性設置元素的錨點偏移,以實現更精細的定位控制。

注意事項:

  • 錨點布局的優先級大于絕對定位(即設置xy屬性)。
  • 元素的錨點只能設置為其父元素或兄弟元素,不能設置為其他無關元素。

? ?

示例:

import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Item {id: mItemanchors.fill: parentRectangle {id: bkanchors.fill: mItemcolor: "aliceblue"}Rectangle {width: 50height: 50color: "red"}Rectangle {x: 50y: 50width: 50height: 50color: "blue"}Rectangle {id: rect_centeranchors.centerIn: parentwidth: 50height: 50color: "red"}Rectangle {id: rect_rightanchors.right: parent.rightanchors.verticalCenter: parent.verticalCenteranchors.rightMargin: 20width: 50height: 50color: "green"}Rectangle {id: rect_bottomanchors.bottom: parent.bottomanchors.horizontalCenter: parent.horizontalCenteranchors.bottomMargin: 20width: 50height: 50color: "green"}Rectangle {id: rect_1anchors.right: rect_center.leftanchors.verticalCenter: parent.verticalCenteranchors.bottomMargin: 20width: 50height: 50color: "pink"}Rectangle {id: rect_2anchors.bottom: rect_center.topanchors.horizontalCenter: parent.horizontalCenterwidth: 50height: 50color: "pink"}}
}

運行結果:

? ??

三、數據綁定

1.基本概念

  • 屬性綁定:QML中的屬性綁定允許將一個屬性的值與另一個屬性或表達式進行關聯。當關聯的屬性或表達式的值發生變化時,綁定的屬性會自動更新。
  • 單向綁定:QML中的屬性綁定通常是單向的,即從數據源到目標屬性。這意味著當數據源屬性發生變化時,目標屬性會自動更新,但反之不然。
  • 動態綁定:QML支持動態綁定,這意味著綁定關系可以在運行時更改。這允許根據應用程序的狀態或用戶交互來動態更新界面。

ps:在使用屬性綁定時,應避免創建循環綁定,這可能導致無限循環和性能問題。

? ? ??

2.綁定方法

  • 冒號綁定:這是最常見的綁定方法,使用冒號操作符“:”在屬性定義時進行綁定。
  • 使用Binding對象:QML提供了Binding類型來實現更靈活的屬性綁定。可以通過創建Binding對象并設置其targetpropertyvalue屬性來定義綁定。
  • 使用Qt.binding()函數:可以在JavaScript代碼中使用Qt.binding()函數來創建綁定,這種方法允許在運行時動態創建綁定關系。

? ?

3.數據模型綁定

  • ListView和GridView:在Qt Quick中,可以使用ListViewGridView等組件來顯示數據模型中的數據。通過將組件的model屬性綁定到一個數據模型,可以實現數據的動態顯示和更新。
  • 數據模型的創建:可以使用ListModelXmlListModel等類型在QML中創建數據模型。這些模型可以存儲和管理數據,并通過綁定與UI組件進行交互。

??

示例:

import QtQuick
import QtQuick.ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Item {id: mItemanchors.fill: parentproperty int number: Math.ceil(slider_num.value)Label {id: label_numanchors.centerIn: parent//方式1text: "value: " + Math.ceil(slider_num.value)//方式2//text: "value: " + parent.number}Slider {id: slider_numanchors.top: label_num.bottomanchors.horizontalCenter: parent.horizontalCenteranchors.topMargin: 20width: 300from: 0to: 100value: 25}//方式3// Binding {//     when: slider_num.value > 50//     target: label_num//     property: "text"//     value: "value: " + Math.ceil(slider_num.value)// }//方式4// Component.onCompleted: {//     //js數據綁定//     label_num.text = Qt.binding(function(){//         return "value: " + Math.ceil(slider_num.value);//     })// }}}

運行結果:

? ?

四、附加屬性及信號

1.屬性

  • 基本屬性:直接賦值(靜態值或綁定表達式)。
  • 自定義屬性:使用?property?關鍵字聲明。

? ??

2.附加屬性

  • 概念:附加屬性是一種可以附加到QML對象的額外屬性,用于在不破壞對象類型定義的情況下擴展對象的功能。
  • 使用場景:例如在處理用戶界面中的鍵盤事件時,可以使用附加屬性來啟用或禁用特定對象的鍵盤輸入。
  • 語法:通過在屬性名前加上附加類型的名稱來訪問附加屬性,例如Keys.enabled
  • 自定義附加屬性:可以通過在C++中創建具有特定屬性和信號的附加類型,并在運行時將其附加到特定對象來實現自定義附加屬性。

? ??

3.信號

  • 概念:信號是QML對象發出的事件通知,用于在對象狀態發生變化時通知其他對象。
  • 信號處理程序:信號處理程序是在信號發出時被調用的JavaScript函數,用于響應信號事件。
  • 語法:信號處理程序的命名格式為on<SignalName>,例如onClicked
  • 自定義信號:可以在QML中使用signal關鍵字自定義信號,并在信號發出時調用相關的信號處理程序。
  • 信號連接:可以使用connect方法將信號連接到其他信號或方法,以便在信號發出時執行特定的操作。

? ?

示例:

import QtQuick
import QtQuick.ControlsWindow {width: 640height: 480visible: truetitle: qsTr("Hello World")Component.onCompleted: console.log("Window");Item {id: mItemanchors.fill: parentComponent.onCompleted: console.log("Item");}Rectangle {anchors.fill: parentcolor: "aliceblue"Component.onCompleted: console.log("Rectangle");}SwipeView {anchors.fill: parentRectangle {color: SwipeView.index === 0 ? "blue" : "black"}Rectangle {color: SwipeView.index === 0 ? "black" : "green"}Rectangle {color: SwipeView.index === 0 ? "black" : "red"}}
}
  • ===:比較兩個值是否嚴格相等(值和類型都相等)。
  • ==:進行隱式類型轉換后比較這兩個值。
輸出:
qml: Window
qml: Rectangle
qml: Item

    QML引擎初始化組件的順序是 "從下到上",同一層級的子組件會按照它們在代碼中的聲明順序反向觸發onCompleted,父組件的onCompleted會先于子組件的onCompleted觸發。

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

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

    相關文章

    java項目之美妝產品進銷存管理系統的設計與開發源碼(ssm+mysql)

    項目簡介 美妝產品進銷存管理系統的設計與開發實現了以下功能&#xff1a; 美妝產品進銷存管理系統的設計與開發的主要使用者分為管理員登錄后修改個人的密碼。產品分類管理中&#xff0c;對公司內的所有產品分類進行錄入&#xff0c;也可以對產品分類進行修改和刪除。產品管…

    Python(pymysql包)操作MySQL【增刪改查】

    下載pymysql&#xff1a; pip install pymysql 在MySQL中創建數據庫&#xff1a;unicom create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;use unicom; 在unicom中創建數據表&#xff1a;admin create table admin(id int not null primary key auto_i…

    日志2025.2.9

    日志2025.2.9 1.增加了敵人揮砍類型 2.增加了敵人的死亡狀態 在敵人身上添加Ragdoll&#xff0c;死后激活布偶模式 public class EnemyRagdoll : MonoBehaviour { private Rigidbody[] rigidbodies; private Collider[] colliders; private void Awake() { rigidbodi…

    HTTP無狀態的概念以及對后端服務的設計會產生的影響

    HTTP無狀態(Statelessness) 是指每個HTTP請求都是獨立的,服務器不會記住或依賴于前一個請求的任何信息。每次請求的處理都與其他請求沒有直接關系。也就是說,服務器在處理請求時,不會存儲關于客戶端狀態的信息。 一、HTTP無狀態的具體含義 ①每個請求獨立:每個請求包含了…

    操作系統—進程與線程

    補充知識 PSW程序狀態字寄存器PC程序計數器&#xff1a;存放下一條指令的地址IR指令寄存器&#xff1a;存放當前正在執行的指令通用寄存器&#xff1a;存放其他一些必要信息 進程 進程&#xff1a;進程是進程實體的運行過程&#xff0c;是系統進行資源分配和調度的一個獨立單位…

    python:面向對象案例烤雞翅

    自助烤雞翅的需求&#xff1a; 1.烤雞翅的時間和對應的狀態&#xff1a; 0-4min :生的 4-7min:半生不熟 7-12min&#xff1a;熟了 12min以上&#xff1a;烤糊了 2.添加調料&#xff1a; 客戶根據自己的需求添加 定義烤雞翅的類、屬性和方法&#xff0c;顯示對象的信息 …

    【基于SprintBoot+Mybatis+Mysql】電腦商城項目之上傳頭像和新增收貨地址

    &#x1f9f8;安清h&#xff1a;個人主頁 &#x1f3a5;個人專欄&#xff1a;【Spring篇】【計算機網絡】【Mybatis篇】 &#x1f6a6;作者簡介&#xff1a;一個有趣愛睡覺的intp&#xff0c;期待和更多人分享自己所學知識的真誠大學生。 目錄 &#x1f680;1.上傳頭像 -持久…

    Windows下ollama詳細安裝指南

    文章目錄 1、Windows下ollama詳細安裝指南1.1、ollama介紹1.2、系統要求1.3、下載安裝程序1.4、安裝步驟1.5、驗證安裝1.6、環境變量配置1.7、模型選擇與安裝【deepseek 示例】1.7.1、拉取并運行模型1.7.2、進階使用技巧 1、Windows下ollama詳細安裝指南 1.1、ollama介紹 olla…

    10vue3實戰-----實現登錄的基本功能

    10vue3實戰-----實現登錄的基本功能 1.基本頁面的搭建2.賬號登錄的驗證規則配置3.點擊登錄按鈕4.表單的校驗5.賬號的登錄邏輯和登錄狀態保存6.定義IAccount對象類型 1.基本頁面的搭建 大概需要搭建成這樣子的頁面: 具體的搭建界面就不多講。各個項目都有自己的登錄界面&#…

    RestTemplate Https 證書訪問錯誤

    錯誤信息 resttemplate I/O error on GET request for “https://21.24.6.6:9443/authn-api/v5/oauth/token”: java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.c…

    講人話的理解ai學習原理

    通過把各種東西打上分數標簽存起來。ai不花算力是不可能的&#xff0c;需要巨大的算力&#xff0c;需要要大量gpu芯片&#xff0c;如果大大降低成本&#xff0c;就需要蒸餾別人成果&#xff0c;把這些參數偷偷弄過來。 比如”貓睡在石頭上感覺很涼快&#xff0c;很舒服&#x…

    【雜談】-文明的量子躍遷:AI時代人類物種的自我重構

    文章目錄 文明的量子躍遷&#xff1a;AI時代人類物種的自我重構一、文明基因的雙螺旋進化二、意識矩陣的拓撲重構三、倫理穹頂下的共生協議 文明的量子躍遷&#xff1a;AI時代人類物種的自我重構 在撒哈拉沙漠的巖壁上&#xff0c;史前人類用赭石顏料繪制出羚羊與獵人的身影&a…

    vue3 點擊圖標從相冊選擇二維碼圖片,并使用jsqr解析二維碼(含crypto-js加密解密過程)

    vue3 點擊圖標從相冊選擇二維碼圖片&#xff0c;并使用jsqr解析二維碼&#xff08;含crypto-js加密解密過程&#xff09; 1.安裝 jsqr 和 crypto-js npm install -d jsqr npm install crypto-js2.在util目錄下新建encryptionHelper.js文件&#xff0c;寫加密解密方法。 // e…

    支持多種網絡數據庫格式的自動化轉換工具——VisualXML

    一、VisualXML軟件介紹 對于DBC、ARXML……文件的編輯、修改等繁瑣操作&#xff0c;WINDHILL風丘科技開發的總線設計工具——VisualXML&#xff0c;可輕松解決這一問題&#xff0c;提升工作效率。 VisualXML是一個強大且基于Excel表格生成多種網絡數據庫文件的轉換工具&#…

    【JVM詳解四】執行引擎

    一、概述 Java程序運行時&#xff0c;JVM會加載.class字節碼文件&#xff0c;但是字節碼并不能直接運行在操作系統之上&#xff0c;而JVM中的執行引擎就是負責將字節碼轉化為對應平臺的機器碼讓CPU運行的組件。 執行引擎是JVM核心的組成部分之一。可以把JVM架構分成三部分&am…

    C++ 順序表

    順序表的操作有以下&#xff1a; 1 順序表的元素插入 給定一個索引和元素&#xff0c;這個位置往后的元素位置都要往后移動一次&#xff0c;元素插入的步驟有以下幾步 &#xff08;1&#xff09;判斷插入的位置是否合法&#xff0c;如果不合法則拋出異常 &#xff08;2&…

    mysql安裝starting the server報錯

    win10家庭版無法啟動服務的&#xff0c;先不要退出&#xff0c;返回上一欄&#xff0c;然后通過電腦搜索欄輸入服務兩個字&#xff0c;在里面找到mysql80&#xff0c;右鍵屬性-登錄&#xff0c;登錄身份切換為本地系統就行了

    萬有的函數關係速成2. 連續和導數

    1.討論間斷點類型 定義: 若函數在某點不滿足連續的條件,則該點為間斷點。 第一類間斷點是左右極限都存在的間斷點,其中左右極限相等的是可去間斷點,不相等的是跳躍間斷點; 第二類間斷點是左右極限至少有一個不存在的間斷點,包括無窮間斷點(極限為無窮)和振蕩間斷點…

    【專題】2025年我國機器人產業發展形勢展望:人形機器人量產及商業化關鍵挑戰報告匯總PDF洞察(附原數據表)

    原文鏈接&#xff1a;https://tecdat.cn/?p39668 機器人已廣泛融入我們生活的方方面面。在工業領域&#xff0c;它們宛如不知疲倦的工匠&#xff0c;精準地完成打磨、焊接等精細工作&#xff0c;極大提升了生產效率和產品質量&#xff1b;在日常生活里&#xff0c;它們是貼心…

    用docker在本地用open-webui部署網頁版deepseek

    前置條件 用Ollama在本地CMD窗口運行deepseek大模型-CSDN博客文章瀏覽閱讀109次&#xff0c;點贊5次&#xff0c;收藏2次。首次運行需要下載deepseek的大模型包&#xff08;大約5GB&#xff0c;根據本地網速的不同在半個小時到幾個小時之間下載完成&#xff09; &#xff0c;并…