1. 程式人生 > >QML中的state 狀態

QML中的state 狀態

QML中的狀態其實很好理解,任何事物在某一事件都是有一個狀態的。

比如你看到的一個視窗,這個時候裡面的文字和圖片正處於某個狀態中。比如一個超連結,你點選了,發現顏色變了,你按了Ctrl+A,整個窗體好像被蒙上了一層布,這也是狀態的改變。所有的一切都是狀態。

因此,QT提供這個功能。比如你想要變換文字的顏色,你會怎麼做?在單擊事件中進行響應是可以的。那如果是每一次單擊都是要變色呢(不是隨機顏色)?那你的槽函式程式碼會非常龐大。因為我們可以事先定義好一些狀態,一旦觸發,就讓它更換狀態就好了。

程式碼來得最直接了,下面是一個改變文字顏色的小例子,當滑鼠鬆開,文字變藍色。

import QtQuick 2.6
import QtQuick.Window 2.2

Window {
    visible: true
    
    MouseArea {
        anchors.fill: parent
        onReleased: {            
            textTest.state="blueStates"
        }
    }
    
    Text {
        id:textTest
        states: [
            State {
                name: "redStates"
                PropertyChanges {
                    target: textTest
                    color:"red" 
                }
            },//注意這裡的逗號
            State {
                name: "blueStates"
                PropertyChanges {
                    target: textTest
                    color:"blue"
                }
            }            
        ]
        text: qsTr("Hello World")
        anchors.centerIn: parent
        state: "redStates"
    }
}

這裡有兩個特殊的地方,第一就是states用的是中括號,[],而且每個state之間使用逗號來隔開;第二是PropertyChanges,這個元素用來對物件進行操作。如果你檢視幫助文件,它的屬性只有幾個。那麼我設定的color之類的是哪裡來的呢?

在我們指定了target之後,就是對要操作的物件進行操作了,所以設定color之類的,其實是我們的text的屬性。也就是說,你要對text的哪些屬性進行更改,只要寫在這個元素裡面就可以了。當該狀態被啟用,那麼它就會去幫你完成這個狀態的變換。

很多人會有個疑問,我變換了顏色,如果我下次變換文字大小,那這個文字是藍色還是紅色呢?

PropertyChanges提供了一個restoreEntryValue屬性。當它為真,表示你下次更改其它屬性的時候,它將會還原之前的更改。當它為假,之前的更改會被保留。

相關推薦

QMLstate 狀態

QML中的狀態其實很好理解,任何事物在某一事件都是有一個狀態的。 比如你看到的一個視窗,這個時候裡面的文字和圖片正處於某個狀態中。比如一個超連結,你點選了,發現顏色變了,你按了Ctrl+A,整個窗體好像被蒙上了一層布,這也是狀態的改變。所有的一切都是狀態。 因此,QT提供這

react state狀態改變,資料在dom渲染問題

    初遇react,問題不斷,react生命週期變化,會隨著setState狀態改變,昨天遇到個問題,處理到晚上10點,雖然自己琢磨未果,但是對生命週期有了很大的瞭解; 後續再補充相關知識,先說需求: 想獲取物件巢狀物件中的某個屬性,把值寫入render中,渲染do

Vuex 在工程化的使用以及state狀態屬性的使用筆記

Vuex是什麼? 引入官方提供的解釋,vuex 是專門為 vue.js 設計的一套 狀態管理模式 。什麼是狀態管理模式?說白了就是資料的集中管理。我們在使用 vue.js 時所用到的資料全部抽取出來放在一個state物件下,這樣我們在任何元件內都可以訪

QML你所不知道的state

       最後一次寫QML已經是2010年了,最近由於產品需要,重拾QML。之前nokia給我們培訓QML的時候,對於state這個概念理解的不是很透徹。最近在做產品前期的QML熱身,發現QML中的state有一種神奇的功能:歷史記憶效應       state核心就是體

Java對象在內存狀態

引用 java對象 之前 恢復 整理 變量 bsp () 一個 可達的/可觸及的 Java對象唄創建後,如果被一個或者多個變量引用,那就是可達的,即從根節點可以觸及到這個對象。 其實就是從根節點掃描,只要這個對象在引用鏈中,那就是可觸及的。 可恢復的 Java對象不再被任何

QML實現setTimeout和setInterval

comment del tint connect start pre 通過 false code Qt的QML中,js未提供setTimeout和setInterval,可以通過下面的代碼實現。 Timer {id: timer} function setTimeout

006_netstatstate詳解

51cto time list osi lose 手動 請求 等待 沒有 TCP三次握手的過程如下: 主動連接端發送一個SYN包給被動連接端; 被動連接端收到SYN包後,發送一個帶ACK和SYN標誌的包給主動連接端; 主動連接

[C++設計模式] state 狀態模式

sso 麻煩 -a head 分支 rtu 相關 代碼 pst 《head first 設計模式》中的樣例非常不錯,想制造一個自己主動交易的糖果機,糖果機有四個狀態:投入錢不足,投入錢足夠,出售糖果,糖果售罄。糖果機的當前狀態處於當中不同的狀態時,它針對同一個操作的

一篇博客分清shell狀態返回值-return-break-continue-exit

shell一篇博客分清shell中的狀態返回值-return-break-continue-exit 一、break、continue、exit、return的區別和對比 條件與循環控制及程序返回值命令知識表命令說明break n如果省略n,則表示跳出整個循環,n表示跳出循環的層數continue n如果省略

JAVA Thread狀態

mac star java started class out bject can follow /** * A thread state. A thread can be in one of the following states: * <

在Fabric ChainCode使用狀態

安裝 for spl 返回 狀態 沒有 interface 文件 ret 在企業級應用開發中,經常會涉及到流程和狀態,而有限狀態機(FSM)則是對應的一種簡單實現,如果復雜化,就上升到Workflow和BPM了。我們在Fabric ChainCode的開發過程中,也很可能涉

http響應狀態碼表示的意義?

forbidden 信息 server gpo 由於 tro 永久 erro 選擇 狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別: 1xx:指示信息--表示請求已接收,繼續處理 2xx:成功--表示請求已被成功接收、理解、接受 3xx:重定向--要完成請

Vuex內容解析和vue cli項目使用狀態管理模式Vuex

ces timeout AD 所有 vue ... 介紹 -- 組裝   中文文檔:vuex官方中文網站 一、vuex裏面都有些什麽內容? const store = new Vuex.Store({ state: { name: ‘weish‘,

Linux系統狀態檢測命令

輸出 硬件 height 操作系統 alt page 不顯示 etc 多個進程 1.ifconfig用於獲取網卡配置與網絡狀態等信息,格式為:ifconfig [網絡設備] [參數] 2.uname命令用於查看系統內核版本等信息,格式為:uname [-a] 查看系統的內

原生 JavaScript 實現 state 狀態管理系統

self. == itl 進入 npr ror patch int -c 原生 JavaScript 實現 state 狀態管理系統 Build a state management system with vanilla JavaScript | CSS-Tri

qml使用model給委托對象MapPolylIne的path屬性賦值。

con num clas mod 代碼 pla eat quic class 遇到兩個崩潰的問題。 1、A線程中給賦值了變量 listA, 線程B中使用函數Add(QList<GeoPath> &list),由於在其函數中調用了list.at(index

設計模式---狀態變化模式之state狀態模式(State

情況 ... 概念 擴展 pen com 耦合 new 發現 前提:狀態變化模式 在組建構建過程中,某些對象的狀態經常面臨變化,如何對這些變化進行有效的管理?同時又維持高層模塊的穩定?“狀態變化”模式為這一個問題提供了一種解決方案。 典型

【PHP常見面試題 PHP基礎-網路協議】HTTP/1.1狀態碼 200 301 304 403 404 500 的含義。

文章目錄 一、考點 1、HTTP協議狀態碼 ① 狀態碼的作用: ② 五類響應:1XX、2XX、3XX、4XX、5XX ③ 常見狀態碼:

Telerik UI for ASP.NET AJAX教程:在React應用程式管理狀態的3個基本技巧

下載Telerik UI for ASP.NET AJAX最新版本 在React應用程式中學習一些有關使用State的快速和重要提示,以幫助您確定哪種選項,適合您的環境。 不要害怕以setState()開頭 首先,如果您是React的新使用者,或者開始使用新的React應用程式,請從Re

QML能使用什麼JS庫

QML中能使用什麼JS庫 JavaScript 是由 ECMAScipt + 宿主環境構成的。 也就是說宿主環境不同,使用 JavaScript 編寫 的庫一般也是不相容的。 例如宿主環境有常見的瀏覽器,也有 nodejs,當然也有 QML。 一般情況下,瀏覽器的 Jav