chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

QML中的動畫設(shè)計,太“難”了

倩倩 ? 來源:嵌入式小生 ? 作者:嵌入式小生 ? 2022-09-09 10:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


在QML中,提供了很多用于設(shè)計炫酷動畫的基本類型,如下圖所示:

ddafd6c6-2fe3-11ed-ba43-dac502259ad0.png

本文將總結(jié)QML中的動畫類型,以及一些類型的基本使用方法。

一、Animation基本動畫類型

首先,肯定是Animation類型,該類型是所有動畫類型的基本類型,注意:我們是不能在qml文檔中直接使用該類型的,該類型是一個基本類型,為不同的動畫方式提供公用的屬性和方法(可以理解成在C++中的抽象基類))。

Animation類型提供了四個屬性:

(1)alwaysRunToEnd:該屬性接收布爾類型的參數(shù)。該屬性保存動畫是否運行到完成才停止。當loops屬性被設(shè)置時,這個屬性是最有用的,因為動畫將正常播放結(jié)束,但不會重新啟動。

(2)loops:該屬性接收int類型的參數(shù)。該屬性保存播放動畫的次數(shù)。默認是1,如果該屬性設(shè)置為Animation.Infinite時,動畫將不斷重復(fù),直到顯式停止(將running屬性設(shè)置為false,或者調(diào)用stop()方法)。

(3)paused:該屬性接布爾類型的參數(shù)。該屬性標識動畫是否暫停。設(shè)置paused屬性可以控制動畫是否暫停。在JavaScript中使用pause()和resume()方法也可以強制暫停和恢復(fù)動畫。

(4)running:該屬性接收布爾類型的參數(shù)。該屬性標識動畫當前是否正在運行。

Animation類型提供三個信號

(1)finished():該信號在動畫自然完成時發(fā)出。注意:當run被設(shè)置為false時,不會觸發(fā)該信號;loops屬性被設(shè)置為Animation.Infinite的動畫也不會觸發(fā)該信號。

(2)started():這個信號在動畫開始時發(fā)出。只有頂級、獨立的動畫才會觸發(fā)該信號。過渡中的動畫或動畫組中的動畫不會觸發(fā)該信號。

(3)stopped():當動畫結(jié)束時發(fā)出該信號。動畫可能已手動停止,或者可能已運行完成。

Animation類型提供六種方法:

(1)complete():停止動畫,跳轉(zhuǎn)到最終屬性值。如果動畫沒有運行,調(diào)用此方法將沒有效果。在調(diào)用complete()之后,running屬性將被設(shè)置為false。與stop()不同,complete()會立即將動畫快進到結(jié)束位置。例如下列代碼:

Rectangle{
NumberAnimationonx{from:0;to:100;duration:500}
}

上面代碼中,使用NumberAnimation類型動畫Rectangle的x屬性值,動畫范圍值為:0~100。當我們在250ms時調(diào)用stop()函數(shù),x屬性值將是50;如果調(diào)用complete(),x屬性值將為100。

(2)pause():該方法將暫停動畫。如果動畫已經(jīng)暫?;蛘咛幱谖催\行狀態(tài),調(diào)用該方法將沒有效果。在調(diào)用pause()之后,pause屬性將被設(shè)置為true。

(3)restart():該方法將重新開始動畫。該方法理解成是stop和start的組合:先調(diào)用stop()停止動畫,然后再調(diào)用start()開始動畫。

(4)resume():恢復(fù)暫停的動畫。如果動畫沒有被暫?;驔]有運行,調(diào)用此方法將沒有效果。在調(diào)用resume()之后,pause屬性將被設(shè)置為false。

(5)start():該方法將開始動畫。如果動畫已經(jīng)運行了,調(diào)用該方法將沒有效果。在調(diào)用start()之后,running屬性將被設(shè)置為true。

(6)stop():停止動畫。如果動畫沒有運行,調(diào)用該方法將不起作用。在調(diào)用stop()之后,running和paused屬性都將被設(shè)置為false。通常情況下,stop()會立即停止動畫,并且動畫不會對屬性值產(chǎn)生進一步的影響。在以下代碼中:

Rectangle{
NumberAnimationonx{from:0;to:100;duration:500}
}

假如我們在250ms時停止動畫,x屬性的值將為50。但如果我們設(shè)置了alwaysRunToEnd屬性,running屬性會立即變?yōu)閒alse,但是動畫將繼續(xù)運行,直到動畫到完成位置才停止。

二、QML中的動畫類型

(2-1)動畫和轉(zhuǎn)場類型

在QML用于描述動畫和轉(zhuǎn)場的類型如下表所示:

序號 名稱 解釋
1 Transition 表示狀態(tài)變化時的動畫轉(zhuǎn)換
2 SequentialAnimation 串行運行動畫
3 ParallelAnimation 并行運行動畫
4 Behavior 為屬性更改指定默認動畫
5 PropertyAction 設(shè)置動畫期間的屬性更改
6 PauseAnimation 用于在動畫過程中暫停動畫
7 SmoothedAnimation 該類型允許屬性平滑的跟蹤值
8 SpringAnimation 允許屬性以類似彈簧的運動方式跟蹤一個值
9 ScriptAction 在動畫過程中運行腳本

(2-2)基于數(shù)值的屬性動畫類型

QML中基于數(shù)值的動畫類型如下表所示:

序號 名稱 解釋
1 AnchorAnimation Anchor變化動畫
2 NumberAnimation 數(shù)值改變動畫
3 ColorAnimation 顏色改變動畫
4 ParentAnimation 父值變化動畫
5 PathAnimation 路徑改變動畫
6 PropertyAnimation 屬性改變動畫
7 RotationAnimation 旋轉(zhuǎn)值改變動畫
8 Vector3dAnimation QVector3d值改變動畫

四、設(shè)計動畫

在上述第一小節(jié)中,描述了QML中動畫的基本類型:Animation,該類型是所有動畫的基本類型,我們已經(jīng)知道,在實際設(shè)計動畫時是不能直接使用該類型的,需要去使用它的派生類型。

當我們在創(chuàng)建動畫時,需要為對象的屬性使用適當?shù)膭赢嬵愋停⒏鶕?jù)所需的行為類型選擇動畫方式。

設(shè)計動畫,我們應(yīng)該考慮如何為對象添加動畫,總結(jié)起來,有以下四種方法:

(4-1)直接屬性動畫

該種方法通過動畫對象的屬性值來創(chuàng)建,隨著時間的推移逐漸改變屬性值。屬性動畫通過在屬性值變化之間插入值來平滑的移動。屬性動畫提供了時間控制,并允許通過緩動曲線進行多種插值。例如下列代碼:

Rectangle{
id:colorRectangle
width:75;
height:75
color:"blue"
opacity:1.0

MouseArea{
anchors.fill:parent
onClicked:{
animateColor.start()
}
}

PropertyAnimation{
id:animateColor;
target:colorRectangle;
properties:"color";
to:"red";
duration:1000
}
}

(4-2)預(yù)定義目標和屬性

在直接屬性動畫方法中,PropertyAnimation類型對象需要指定特定的目標和屬性值,用于指定想要動畫的對象和屬性。除此之外,我們還可以使用 on 語句來設(shè)計動畫,該語句將直接指定將要動畫的屬性。例如下列代碼:

importQtQuick2.0

Rectangle{
id:rect
width:100;height:100
color:"red"

PropertyAnimationonx{to:100}
PropertyAnimationony{to:100}
}

上述代碼中,使用PropertyAnimation指定了在rect代表矩形的x和y屬性上的動畫。

預(yù)定義目標和屬性也可以在分組動畫中使用,用于確保組內(nèi)所有動畫都應(yīng)用到相同的屬性上。例如下列代碼:

Rectangle{
width:100;height:100
color:"yellow"

SequentialAnimationoncolor{
ColorAnimation{to:"red";duration:1000}
ColorAnimation{to:"blue";duration:1000}
}
}

上述代碼中,將以串行方式動畫Rectangle的color屬性。顏色動畫使用ColorAnimation類型來描述,在上述代碼中,Rectangle的顏色將從黃色變成紅色,然后變成藍色。

(4-3)狀態(tài)轉(zhuǎn)換動畫

在Qt Quick中,States是Item的屬性配置項,屬性可能有不同的值來反映不同的狀態(tài)。狀態(tài)變化會帶來屬性變化,這時候我們可以平滑過渡屬性變化,從而可以形成動畫效果。

QML中,Transition用于包含動畫類型,來表示狀態(tài)變化引起的屬性變化。

例如:假設(shè)按鈕可能有兩種狀態(tài),當用戶單擊按鈕時為按下狀態(tài),當用戶釋放按鈕時為釋放狀態(tài)。因此,我們可以為每個狀態(tài)分配不同的屬性配置。然后使用一個Transition將使從被按下狀態(tài)到被釋放狀態(tài)的變化產(chǎn)生動畫效果。同樣地,在從釋放狀態(tài)到按下狀態(tài)的變化過程中也會有一個動畫。代碼如下:

Rectangle{
width:75;
height:75
id:button
state:"RELEASED"
radius:5

MouseArea{
anchors.fill:parent
onPressed:button.state="PRESSED"
onReleased:button.state="RELEASED"
}

states:[
State{
name:"PRESSED"
PropertyChanges{target:button;color:"blue"}
},
State{
name:"RELEASED"
PropertyChanges{target:button;color:"red"}
}
]

transitions:[
Transition{
from:"PRESSED"
to:"RELEASED"
ColorAnimation{target:button;duration:100}
},
Transition{
from:"RELEASED"
to:"PRESSED"
ColorAnimation{target:button;duration:100}
}
]
}

上述代碼中,是由狀態(tài)和狀態(tài)轉(zhuǎn)換動畫組合完成的,首先使用State定義矩形的兩種狀態(tài):PRESSED、RELEASE,在這兩種狀態(tài)下分別定義兩種顏色。然后使用Transition定義兩種狀態(tài)轉(zhuǎn)換動畫:(1)從PRESSED到RELEASE狀態(tài)轉(zhuǎn)換動畫。(2)從RELEASE到PRESSED狀態(tài)轉(zhuǎn)換動畫。在MouseArea類型鼠標事件處理程序中指定鼠標操作對應(yīng)的矩態(tài):當鼠標按鈕按下時,button為PRESSED狀態(tài);當鼠標按鈕釋放時,button為RELEASE狀態(tài)。運行效果如下圖所示:

ddf9abde-2fe3-11ed-ba43-dac502259ad0.gif

tofrom屬性綁定到狀態(tài)名稱,將把特定的轉(zhuǎn)換分配給狀態(tài)更改。將to屬性設(shè)置為通配符“*”,表示轉(zhuǎn)換適用于任何狀態(tài)更改:

transitions:
Transition{
to:"*"
ColorAnimation{target:button;duration:100}
}

(4-4)使用Behavior定義默認的屬性動畫

默認的屬性動畫是使用Behavior設(shè)置的。在Behavior類型中聲明的動畫應(yīng)用于屬性,并使屬性值的變化發(fā)生動畫。Behavior類型有一個enabled屬性來特意啟用或禁用行為動畫。當屬性值發(fā)生改變時,將按照Behavior指定的動畫進行動畫改變。

例如下列代碼:

Rectangle{
id:rect
width:100;
height:100
color:"red"

Behavioronwidth{
NumberAnimation{duration:1000}
}

Behavioronx
{
NumberAnimation{duration:1000}
}

Behavioroncolor{
ColorAnimation{duration:1000}
}

Behavioronradius
{
NumberAnimation{duration:1000}
}

MouseArea{
anchors.fill:parent
onClicked:{
rect.width=50;
rect.x=100
rect.color="blue";
rect.radius=50;
}
}
}

上述代碼中,使用Behavior為Rectangle的width、x、color和radius屬性指定了默認動畫。然后定義了一個MouseArea用于接收鼠標事件,在鼠標的點擊事件處理程序中,改變width、x、color和radius屬性的值,那么該Rectangle將按照默認指定的動畫來更改屬性值。效果如下:de187adc-2fe3-11ed-ba43-dac502259ad0.gif

Behavior on 是將行為動畫分配到屬性上的一種快捷方法。

五、并行或串行播放動畫

動畫可以并行運行,也可以串行運行。并行動畫會同時播放一組動畫,而串行動畫會依次播放一組動畫。在SequentialAnimationParallelAnimation中分組的動畫會按順序或并行播放動畫。例如下列代碼:

Rectangle{
id:banner
width:150;
height:100;
border.color:"black"
color:"lightblue"

Column{
anchors.centerIn:parent
Text{
id:text1
text:"iriczhao-01"
opacity:0.01
color:"red"
}
Text{
id:text2
text:"iriczhao-02"
opacity:0.01
color:"white"
}
Text{
id:text3
text:"iriczhao-03"
opacity:0.01
color:"blue"
}
spacing:10
}

MouseArea{
anchors.fill:parent
onPressed:playTextBanner.start()
}

SequentialAnimation{
id:playTextBanner
running:false
NumberAnimation{target:text1;property:"opacity";to:1.0;duration:200}
NumberAnimation{target:text2;property:"opacity";to:1.0;duration:200}
NumberAnimation{target:text3;property:"opacity";to:1.0;duration:200}
}
}

上述代碼首先定義了三個本文顯示類型,分別顯示不同的文本,然后定義了MouseArea類型用于接收鼠標的點擊事件,該鼠標點擊區(qū)域為長為150,寬度為100的Rectangle。還設(shè)計了一個名為playTextBanner的串行動畫。當我們的鼠標在id為banner的矩形區(qū)域內(nèi)點擊的時候,將會執(zhí)行這個串行動畫。在串行動畫中,使用NumberAnimation數(shù)值動畫類型改變?nèi)齻€Text類型文本的“opacity”屬性值,從而實現(xiàn)三個文本的依次顯示。效果如下:

de403928-2fe3-11ed-ba43-dac502259ad0.gif

一旦單個動畫被放置到SequentialAnimation或ParallelAnimation中,它們就不能再獨立的啟動和停止。串行或并行動畫必須以一個組的方式啟動和停止。

SequentialAnimation類型對于播放Transition動畫也很有用,因為動畫是在Transition內(nèi)部并行播放的。

五、尾

本文主要記錄了關(guān)于QML動畫的基本類型,以及使用這些類型設(shè)計動畫的基本方法。State、TransitionAnimation派生類型是設(shè)計QML動畫的必須元素。高版本的Qt支持使用時間線和關(guān)鍵幀來創(chuàng)建動畫,這一部分內(nèi)容就在后續(xù)文中寫了。

在實際使用中,我們不用手動去編寫動畫相關(guān)的代碼,可以直接使用Qt Design Studio去設(shè)計即可,該工具會自動生成動畫相關(guān)的代碼,我們只需要能看懂生成的代碼就可以了,開發(fā)效率是非常高的。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67521
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77125
  • 動畫
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    8789

原文標題:QML中的動畫設(shè)計,太“難”了

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    LM555QML定時器:功能特性、應(yīng)用及設(shè)計要點

    了解一下它。 文件下載: lm555qml.pdf 一、LM555QML簡介 LM555QML是一款可直接替代SE555/NE555的定時器,能實現(xiàn)從微秒到數(shù)小時的定時,支持單穩(wěn)態(tài)和無穩(wěn)態(tài)兩種工作模式,并且占空比可調(diào)。它額外提供
    的頭像 發(fā)表于 02-10 15:40 ?145次閱讀

    德州儀器LM117QML/LM117QML - SP可調(diào)穩(wěn)壓器深度解析

    德州儀器LM117QML/LM117QML - SP可調(diào)穩(wěn)壓器深度解析 在電子工程領(lǐng)域,穩(wěn)壓器是電源設(shè)計不可或缺的組件,它能夠為電路提供穩(wěn)定的電壓輸出,確保系統(tǒng)的正常運行。德州儀器(TI
    的頭像 發(fā)表于 02-06 11:30 ?209次閱讀

    深入剖析 LM136-5.0QML 與 LM136A-5.0QML:高精度 5.0V 參考二極管的理想之選

    深入剖析 LM136-5.0QML 與 LM136A-5.0QML:高精度 5.0V 參考二極管的理想之選 在電子工程師的日常設(shè)計,高精度、穩(wěn)定的電壓參考源是許多電路不可或缺的關(guān)鍵組件。今天,我們
    的頭像 發(fā)表于 02-06 11:00 ?182次閱讀

    高速精密運算放大器LM118QML:特性、應(yīng)用與設(shè)計要點

    高速精密運算放大器LM118QML:特性、應(yīng)用與設(shè)計要點 在電子工程師的日常設(shè)計工作,運算放大器是不可或缺的基礎(chǔ)元件。而對于那些對帶寬和轉(zhuǎn)換速率有較高要求的應(yīng)用場景,選擇一款合適的高速運算放大器
    的頭像 發(fā)表于 02-06 09:55 ?147次閱讀

    深入解析LM747QML雙運算放大器:特性、參數(shù)與應(yīng)用考量

    了解它的特性、參數(shù)以及使用的注意事項。 文件下載: lm747qml.pdf 一、LM747QML概述 LM747QML是一款通用雙運算放大器,兩個放大器共享一個公共偏置網(wǎng)絡(luò)和電源引
    的頭像 發(fā)表于 02-06 09:55 ?182次閱讀

    LM111QML電壓比較器:特性、應(yīng)用與設(shè)計要點解析

    LM111QML電壓比較器:特性、應(yīng)用與設(shè)計要點解析 在電子工程師的日常設(shè)計工作,電壓比較器是一種常見且關(guān)鍵的器件。今天,我們就來深入探討一下TI公司的LM111QML電壓比較器,了解它的特性
    的頭像 發(fā)表于 02-06 09:30 ?346次閱讀

    深入剖析LM741QML運算放大器:特性、參數(shù)與應(yīng)用

    深入剖析LM741QML運算放大器:特性、參數(shù)與應(yīng)用 在電子工程領(lǐng)域,運算放大器是一種極為重要的基礎(chǔ)元件,廣泛應(yīng)用于各種電子設(shè)備。今天,我們就來深入了解一下德州儀器(TI)的LM741QML
    的頭像 發(fā)表于 02-06 09:30 ?436次閱讀

    深入解析LM2941QML與LM2941QML - SP:1A低壓差可調(diào)穩(wěn)壓器的卓越之選

    深入解析LM2941QML與LM2941QML - SP:1A低壓差可調(diào)穩(wěn)壓器的卓越之選 在電子工程師的日常設(shè)計工作,穩(wěn)壓器是不可或缺的重要組件。今天,我們將深入探討德州儀器(TI
    的頭像 發(fā)表于 02-05 17:15 ?581次閱讀

    LM2941QML與LM2941QML - SP:1A低壓差可調(diào)穩(wěn)壓器詳解

    LM2941QML與LM2941QML - SP:1A低壓差可調(diào)穩(wěn)壓器詳解 在電子設(shè)計領(lǐng)域,穩(wěn)壓器是不可或缺的組件,它能為電路提供穩(wěn)定的電壓,保證電子設(shè)備的正常運行。今天我們就來詳細探討德州儀器
    的頭像 發(fā)表于 02-05 17:15 ?579次閱讀

    輻射加固型可調(diào)穩(wěn)壓器LM117QML - SP的技術(shù)剖析與應(yīng)用指南

    輻射加固型可調(diào)穩(wěn)壓器LM117QML - SP的技術(shù)剖析與應(yīng)用指南 在電子工程師的設(shè)計工作,穩(wěn)壓器是不可或缺的關(guān)鍵元件。今天我們要深入探討的是德州儀器(TI)推出的一款輻射加固型3端可調(diào)穩(wěn)壓器
    的頭像 發(fā)表于 02-05 17:10 ?539次閱讀

    深入剖析LM6172QML:從特性到應(yīng)用的全面解讀

    深入剖析LM6172QML:從特性到應(yīng)用的全面解讀 在電子工程師的日常工作,選擇合適的放大器是設(shè)計成功的關(guān)鍵之一。今天,我們要深入了解一款高性能的放大器——LM6172QML,探討它的特性、應(yīng)用以
    的頭像 發(fā)表于 02-05 16:20 ?286次閱讀

    解析LM2940QML與LM2940QML - SP:1A低壓差穩(wěn)壓器的卓越之選

    解析LM2940QML與LM2940QML - SP:1A低壓差穩(wěn)壓器的卓越之選 在電子設(shè)備的設(shè)計,電源管理是至關(guān)重要的一環(huán)。穩(wěn)壓器作為電源管理的核心組件,其性能直接影響著整個系統(tǒng)的穩(wěn)定性和可靠性
    的頭像 發(fā)表于 02-05 14:10 ?205次閱讀

    深入剖析LM2940QML與LM2940QML - SP 1A低壓差穩(wěn)壓器

    和LM2940QML - SP這兩款1A低壓差穩(wěn)壓器,看看它們有何獨特之處,以及在實際設(shè)計如何更好地應(yīng)用。 文件下載: lm2940qml.pdf 一、產(chǎn)品特性亮點 輻射特性 :這兩款穩(wěn)壓器具備抗輻射能力,能
    的頭像 發(fā)表于 02-05 13:50 ?252次閱讀

    分享---儲能UI界面能量流動動畫實現(xiàn)方法

    本文分享 工商業(yè)儲能設(shè)備的UI界面如何實現(xiàn) 能量流動的動畫效果。 本例子效果 基于拓普微工業(yè)級 7寸屏電容串口屏(HMT070ETA-D型號)實現(xiàn): 第1步:建立工程和頁面 使用SGTools新建
    發(fā)表于 09-02 18:22

    ?LM136A-2.5QML/LM136A-2.5QML-SP 技術(shù)文檔摘要

    LM136A-2.5QML集成電路是一款精密的2.5V并聯(lián)穩(wěn)壓二極管。該單片IC基準電壓源作為低溫度系數(shù)的2.5V齊納管工作,動態(tài)阻抗為0.2Ω。LM136A-2.5QML 上的第三個端子可以輕松
    的頭像 發(fā)表于 08-15 09:55 ?1023次閱讀
    ?LM136A-2.5<b class='flag-5'>QML</b>/LM136A-2.5<b class='flag-5'>QML</b>-SP 技術(shù)文檔摘要