Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
QML Scrolling Digits/bg: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:Snippets]] | [[Category:Snippets]] | ||
[[Category:HowTo]] | |||
[[Category:Developing_with_Qt::Qt Quick]] | |||
[[Category:Developing_with_Qt::Qt Quick::QML]] | |||
'''Български''' [[QML_Scrolling_Digits|English]] | '''Български''' [[QML_Scrolling_Digits|English]] | ||
[toc align_right= | [toc align_right="yes" depth="2"] | ||
= Как да направим скролиращи се числа = | = Как да направим скролиращи се числа = | ||
Line 15: | Line 18: | ||
Първо създаваме компонент за всяка цифра: | Първо създаваме компонент за всяка цифра: | ||
Digit.qml | Digit.qml | ||
<code> | |||
import QtQuick 1.1 | |||
Rectangle { | Rectangle { | ||
id: digitItem | |||
width: size | |||
height: size | |||
clip: true | clip: true | ||
gradient: Gradient { | gradient: Gradient { | ||
GradientStop { | |||
position: 0.0 | |||
color: "black" | |||
} | |||
GradientStop { | GradientStop { | ||
position: 0.5 | |||
color: "#222222" | |||
} | |||
GradientStop { | GradientStop { | ||
position: 1.0 | |||
color: "black" | |||
} | |||
} | |||
border.color: | border.color: "black" | ||
border.width: 1 | |||
property int digit: 0 | property int digit: 0 | ||
property int size: 20 | |||
onDigitChanged: { digitPath.currentIndex = digit; } | onDigitChanged: { digitPath.currentIndex = digit; } | ||
PathView { | PathView { | ||
id: digitPath | |||
width: digitItem.size | width: digitItem.size | ||
height: digitItem.size * 10 | |||
interactive: false | interactive: false | ||
Line 43: | Line 66: | ||
model: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] | model: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] | ||
delegate: Text { | delegate: Text { | ||
width: digitItem.size | |||
height: digitItem.size | |||
text: modelData; | text: modelData; | ||
color: | color: "white"; | ||
horizontalAlignment: Text.AlignHCenter; | horizontalAlignment: Text.AlignHCenter; | ||
verticalAlignment: Text.AlignVCenter; | |||
font.pointSize: digitItem.size-4; | font.pointSize: digitItem.size-4; | ||
} | |||
preferredHighlightBegin: 0.5 | preferredHighlightBegin: 0.5 | ||
preferredHighlightEnd: 0.5 | |||
path: Path { | path: Path { | ||
startX: digitPath.width / 2 | |||
startY: 0 | |||
PathLine { x: digitPath.width / 2; y: digitPath.height } | PathLine { x: digitPath.width / 2; y: digitPath.height } | ||
} | |||
} | |||
} | |||
</code> | |||
Компонентът е един правоъгълник, в който центрираме ''PathView'' и включваме клипирането, за да виждаме само текущата цифра. | Компонентът е един правоъгълник, в който центрираме ''PathView'' и включваме клипирането, за да виждаме само текущата цифра. | ||
Line 63: | Line 97: | ||
След това създавеме самия компонент за скролиращите се цифри: | След това създавеме самия компонент за скролиращите се цифри: | ||
ScrollingDigits.qml | ScrollingDigits.qml | ||
<code> | |||
import QtQuick 1.1 | |||
Row { | Row { | ||
id: scrollingDigits | |||
property int number: 0 | property int number: 0 | ||
property int positions: 5 | |||
Repeater { | Repeater { | ||
id: rep | |||
model: scrollingDigits.positions | model: scrollingDigits.positions | ||
Digit { | Digit { | ||
} | |||
} | |||
onNumberChanged: { | onNumberChanged: { | ||
Line 79: | Line 120: | ||
var tmp = number | var tmp = number | ||
for( var i = 0; i | for( var i = 0; i < positions; ++i ) { | ||
rep.itemAt( positions - i - 1).digit = tmp % 10 | |||
tmp = Math.floor( tmp / 10 ) | |||
} | |||
} | |||
} | |||
</code> | |||
Добавяме две нови свойства към ''Row'' елемента - '''number''' и '''positions''' . '''number''' съдържа числото, което искате да покажете, а '''position''' в колко позиции да се изписва. | Добавяме две нови свойства към ''Row'' елемента - '''number''' и '''positions''' . '''number''' съдържа числото, което искате да покажете, а '''position''' в колко позиции да се изписва. | ||
Line 87: | Line 134: | ||
main.qml | main.qml | ||
<code> | <code> | ||
import QtQuick 1.1 | |||
Rectangle | Rectangle | ||
{ | |||
width: 400 | |||
height: 400 | |||
color: | color: "gray" | ||
ScrollingDigits { | ScrollingDigits { | ||
anchors.centerIn: parent | |||
positions: 4 | positions: 4 | ||
NumberAnimation on number { | NumberAnimation on number { | ||
from: 15; to: 100 | |||
duration: 50000 | |||
} | |||
} | |||
} |
Revision as of 12:51, 25 February 2015
Български English
[toc align_right="yes" depth="2"]
Как да направим скролиращи се числа
Ето един начин как бързо и лесно да направите скролиращи се числа.
[YouTubeID:KLE4FdGc12U]
Код
Първо създаваме компонент за всяка цифра:
Digit.qml
import QtQuick 1.1
Rectangle {
id: digitItem
width: size
height: size
clip: true
gradient: Gradient {
GradientStop {
position: 0.0
color: "black"
}
GradientStop {
position: 0.5
color: "#222222"
}
GradientStop {
position: 1.0
color: "black"
}
}
border.color: "black"
border.width: 1
property int digit: 0
property int size: 20
onDigitChanged: { digitPath.currentIndex = digit; }
PathView {
id: digitPath
width: digitItem.size
height: digitItem.size * 10
interactive: false
anchors.centerIn: parent
model: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
delegate: Text {
width: digitItem.size
height: digitItem.size
text: modelData;
color: "white";
horizontalAlignment: Text.AlignHCenter;
verticalAlignment: Text.AlignVCenter;
font.pointSize: digitItem.size-4;
}
preferredHighlightBegin: 0.5
preferredHighlightEnd: 0.5
path: Path {
startX: digitPath.width / 2
startY: 0
PathLine { x: digitPath.width / 2; y: digitPath.height }
}
}
}
Компонентът е един правоъгълник, в който центрираме PathView и включваме клипирането, за да виждаме само текущата цифра.
След това създавеме самия компонент за скролиращите се цифри:
ScrollingDigits.qml
import QtQuick 1.1
Row {
id: scrollingDigits
property int number: 0
property int positions: 5
Repeater {
id: rep
model: scrollingDigits.positions
Digit {
}
}
onNumberChanged: {
var tmp = number
for( var i = 0; i < positions; ++i ) {
rep.itemAt( positions - i - 1).digit = tmp % 10
tmp = Math.floor( tmp / 10 )
}
}
}
Добавяме две нови свойства към Row елемента - number и positions . number съдържа числото, което искате да покажете, а position в колко позиции да се изписва.
Пример:
main.qml
import QtQuick 1.1
Rectangle
{
width: 400
height: 400
color: "gray"
ScrollingDigits {
anchors.centerIn: parent
positions: 4
NumberAnimation on number {
from: 15; to: 100
duration: 50000
}
}
}