QML 之狀態

文章目錄

    • 狀態
      • 示例 1:矩形的可見/隱藏切換
        • 功能介紹:
      • 示例 2:按鈕的激活/非激活狀態
        • 功能介紹:
      • 示例 3:面板的展開/折疊
        • 功能介紹:
      • 示例 4:燈泡的開/關
        • 功能介紹:
      • 總結


狀態

狀態是界面中元素的一種特定外觀或行為,常見的狀態有:可見/隱藏激活/非激活展開/折疊等。通過改變元素的屬性或樣式,可以實現這些狀態的切換,從而讓界面更加動態和富有交互性。

QML 中,狀態由 State 元素定義。每個狀態需要一個唯一的名稱(name),并定義在該狀態下,目標元素的屬性或樣式會如何改變。我們通過 states 屬性列出所有可能的狀態,并使用 state 屬性指定元素的當前狀態。

接下來通過幾個簡單的例子演示如何在 QML 中使用狀態。


示例 1:矩形的可見/隱藏切換

在這個例子中,我們實現了一個藍色矩形,通過鼠標點擊可以切換其可見隱藏狀態。

import QtQuick
import QtQuick.ControlsRectangle {width: 200height: 200color: "lightgray"Rectangle {id: rectanglewidth: 100height: 100anchors.centerIn: parentcolor: "blue"state: "visibleState"  // 初始狀態states: [State {name: "visibleState"PropertyChanges { target: rectangle; opacity: 1 }},State {name: "hiddenState"PropertyChanges { target: rectangle; opacity: 0 }}]}MouseArea {anchors.fill: parentonClicked: {// 切換狀態rectangle.state = (rectangle.state === "visibleState") ? "hiddenState" : "visibleState";}}
}
功能介紹:
  1. 定義了兩個狀態:
    • visibleState:矩形完全可見(opacity: 1)。
    • hiddenState:矩形完全隱藏(opacity: 0)。
  2. 通過鼠標點擊,切換矩形的狀態,顯示或隱藏矩形。

示例 2:按鈕的激活/非激活狀態

接下來實現一個按鈕,點擊后改變其背景顏色和大小,表示它被激活或非激活。

import QtQuick
import QtQuick.ControlsRectangle {width: 300height: 200color: "white"Rectangle {id: buttonwidth: 100height: 50anchors.centerIn: parentcolor: "gray"radius: 10state: "inactive"states: [State {name: "inactive"PropertyChanges {target: buttoncolor: "gray"scale: 1}},State {name: "active"PropertyChanges {target: buttoncolor: "green"scale: 1.2}}]}MouseArea {anchors.fill: parentonClicked: {// 切換按鈕的激活狀態button.state = (button.state === "inactive") ? "active" : "inactive";}}
}
功能介紹:
  1. 定義了兩個狀態:
    • inactive:按鈕為灰色且大小為正常比例。
    • active:按鈕變為綠色,且略微放大。
  2. 鼠標點擊后,按鈕在兩種狀態間切換,直觀地表現激活和非激活狀態。

示例 3:面板的展開/折疊

實現一個面板,點擊后可以在展開折疊狀態之間切換。

import QtQuick
import QtQuick.ControlsRectangle {width: 300height: 200color: "lightblue"Rectangle {id: panelwidth: 200height: 50anchors.horizontalCenter: parent.horizontalCentercolor: "lightgray"state: "collapsed"states: [State {name: "collapsed"PropertyChanges {target: panelheight: 50}},State {name: "expanded"PropertyChanges {target: panelheight: 150}}]}Text {text: "Click to Toggle"anchors.horizontalCenter: panel.horizontalCenteranchors.verticalCenter: panel.verticalCenter}MouseArea {anchors.fill: parentonClicked: {// 切換面板狀態panel.state = (panel.state === "collapsed") ? "expanded" : "collapsed";}}
}
功能介紹:
  1. 定義了兩個狀態:
    • collapsed:面板高度為 50 像素。
    • expanded:面板高度擴展到 150 像素。
  2. 鼠標點擊后,面板在展開和折疊之間切換。

示例 4:燈泡的開/關

最后,我們用一個燈泡的示例來演示狀態的視覺效果切換。

import QtQuick
import QtQuick.ControlsRectangle {width: 200height: 200color: "black"Rectangle {id: bulbwidth: 100height: 100anchors.centerIn: parentradius: 50color: "gray"state: "off"states: [State {name: "off"PropertyChanges { target: bulb; color: "gray" }},State {name: "on"PropertyChanges { target: bulb; color: "yellow" }}]}MouseArea {anchors.fill: parentonClicked: {// 切換燈泡狀態bulb.state = (bulb.state === "off") ? "on" : "off";}}
}
功能介紹:
  1. off 狀態:燈泡為灰色,表示關閉。
  2. on 狀態:燈泡為黃色,表示點亮。
  3. 鼠標點擊后,燈泡顏色會在灰色和黃色之間切換,模擬開關效果。

總結

在 QML 中,通過定義 State 和使用 PropertyChanges,可以輕松實現界面元素的動態效果。無論是可見性切換激活效果,還是更復雜的展開/折疊開關模擬,都可以通過狀態來完成。這種方式不僅代碼簡潔,還讓界面邏輯更加清晰和直觀。

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

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

相關文章

C語言簡單測試總結

前言 在學C語言之前回顧一下C中的一些知識.選用的是中國大學MOOC中C程序設計(面向對象進階)中的C語言水平評估測試題. 題目 ?The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float題解:unsigned是無符號的意識,通常在…

frp(s) 內網穿透 Liunx環境雙端Docker部署

FRP(Fast Reverse Proxy)是一款高性能的反向代理應用,主要用于內網穿透、負載均衡和反向代理等多種場景。它能夠將內網中的服務暴露給公網,實現遠程訪問。此外,FRP還可以用于接收類似GitHub或第三方提供的Webhook請求。在微服務架構中,FRP可以作為服務調用的反向代理,提…

代碼隨想錄算法訓練營第三十五天|01背包問題 二維和一維(卡碼網第46題)、416分割等和子集

day35 動態規劃part03 1. 01背包問題 二維 卡碼網第46題 01 背包:有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i],得到的價值是value[i] 。每件物品只能用一次,求解將哪些物品裝入背包里物品價值總和最大。 動規五部…

【Unity3D】ECS入門學習(九)SystemBase

SystemBase:支持主線程或多線程執行篩選實體任務。 主要介紹是內部成員:Entities的各種篩選方法,其內部成員還有EntityManager ForEach方法篩選,傳遞一個有參委托函數進去,參數ref xxx組件類(可填多個&…

[Android]init中添加新的command

在Android的init進程中,command是用于定義啟動時要執行的具體命令行指令的關鍵部分。init進程是Android系統啟動的第一個進程,它負責初始化系統的各個組件,并啟動必要的服務。command可以在init.rc文件及其包含的其他.rc文件中找到&#xff0…

STM32F103RCT6學習之五:ADC

1.ADC基礎 ADC(Analog-Digital Converter)模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量,建立模擬電路到數字電路的橋梁12位逐次逼近型ADC,1us轉換時間 輸入電壓范圍:0~3.3V&#xff…

strncpy函數和使用案例

strncpy 是 C 語言標準庫函數之一,用于字符串操作。它的功能是將源字符串(source)中的字符復制到目標字符串(destination)中,但最多復制 n 個字符。如果源字符串的長度小于 n,則目標字符串剩余的…

實現類似gpt 打字效果

1. css的動畫(animation) css中實現動畫有兩種方式:transition過渡動畫、 animation自定義動畫。 具體的可以看MDN鏈接:https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定義關鍵幀動畫并未其命名使用自定義動…

微軟遠程桌面APP怎么用

微軟遠程桌面(Remote Desktop)客戶端(RD Client)是一款由微軟開發的應用程序,允許用戶通過網絡連接遠程訪問和控制另一臺計算機。同時,微軟遠程桌面RD Client支持多種設備和操作系統,包括Window…

【每日學點鴻蒙知識】grid里面的item支持拖動問題、WebView回調問題、獲取頁面名稱、彈幕效果實現、修改App輸出路徑 |

1、HarmonyOS grid里面的item支持拖動問題? 想要grid里面的item支持拖動,拖出來后可以刪除,下面的代碼就是你們上次給我提供的,正常情況下是可以使用的但是,往下拖的過程中遇到了TextInput后,gridItem的onDragMove就不會走了,我給TextInput設置了draggable(false)后…

SDK 指南

在前端開發中,SDK(Software Development Kit,軟件開發工具包)是一個用于幫助開發者在特定平臺、框架或技術棧中實現某些功能的工具集。 1. SDK 是什么? SDK 是一種開發工具包,它提供了開發人員實現某些功…

Unity3d UGUI如何優雅的實現Web框架(Vue/Rect)類似數據綁定功能(含源碼)

前言 Unity3d的UGUI系統與Web前端開發中常見的數據綁定和屬性綁定機制有所不同。UGUI是一個相對簡單和基礎的UI系統,并不內置像Web前端(例如 Vue.js或React中)那樣的雙向數據綁定或自動更新UI的機制。UGUI是一種比較傳統的 UI 系統&#xff…

OptimisticLock

想象你和你的朋友去了一家很受歡迎的餐廳。你們想要點一份特別的菜品——這家餐廳的招牌菜,但因為這道菜非常受歡迎,所以它的狀態可能會隨時變化(比如售罄或重新上架)。 傳統方式(悲觀鎖) 通常情況下&…

10分鐘掌握項目管理核心工具:WBS、甘特圖、關鍵路徑法全解析

一、引言 在項目管理的廣闊天地里,猶如一場精心編排的交響樂演奏,每個樂器、每個音符都需精準配合才能奏響美妙樂章。而 WBS(工作分解結構)、甘特圖、關鍵路徑法無疑是這場交響樂中的關鍵樂章,它們從不同維度為項目管…

TCP 和 UDP 的區別:解析網絡傳輸協議

引言 在計算機網絡的世界中,TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Datagram Protocol,用戶數據報協議)是兩種極為重要且應用廣泛的傳輸層協議。它們在功能、特性以及適…

代碼思想之快慢路徑

處理業務代碼的過程中,對業務代碼有了一些調整,后續發現這是一種代碼思想 在一段復雜的邏輯里,我把查詢redis操作寫在了前面, 業務邏輯: 如果需要不打壓就退出本次處理 查詢redis拿到商品需要打壓的次數 如果次數 …

Java 溯本求源之基礎(三十一)——泛型

目錄 1. 泛型的定義與基本概念 2. 泛型的優勢 3. 泛型的基本語法 3.1 泛型類 3.2 泛型方法 3.3 泛型接口 4. 泛型的邊界 4.1 上限通配符(? extends T) 4.2 下限通配符(? super T) 5. 泛型的類型擦除 6. 泛型的使用場景…

純 HTML+CSS+JS 實現一個炫酷的圣誕樹動畫特效

純 HTMLCSSJS 實現一個炫酷的圣誕樹動畫特效 前言 圣誕節快到了,今天給大家帶來一個簡單但是效果不錯的圣誕樹動畫特效。這個特效完全使用原生 HTML、CSS 和 JavaScript 實現,包含閃爍的星星、隨機彩燈等元素,非常適合節日氣氛!…

Maven:Java項目構建與管理的利器

在Java開發領域,Maven無疑是一個舉足輕重的工具。它不僅簡化了項目的構建和依賴管理,還促進了團隊協作和持續集成。本文將深入探討Maven的核心功能、基本配置以及在實際項目中的應用。 Maven簡介 Maven是Apache基金會下的一個開源項目,旨在…

【ES6復習筆記】Promise對象詳解(12)

1. 什么是 Promise? Promise 是 JavaScript 中處理異步操作的一種機制,它可以讓異步操作更加容易管理和控制。Promise 對象代表一個異步操作的最終完成或失敗,并提供了一種方式來處理操作的結果。 2. Promise 的基本語法 Promise 對象有三…