Spinnable wheel of items that can be selected. 更多...
import 语句: | import QtQuick.Controls 2.15 |
Since: | Qt 5.7 |
继承: |
Tumbler { model: 5 // ... }
Tumbler allows the user to select an option from a spinnable "wheel" of items. It is useful for when there are too many options to use, for example, a RadioButton , and too few options to require the use of an editable SpinBox . It is convenient in that it requires no keyboard usage and wraps around at each end when there are a large number of items.
The API is similar to that of views like ListView and PathView ; a model and delegate can be set, and the count and currentItem properties provide read-only access to information about the view. To position the view at a certain index, use positionViewAtIndex() .
Unlike views like
PathView
and
ListView
, however, there is always a current item (when the model isn't empty). This means that when
count
等于
0
,
currentIndex
将是
-1
. In all other cases, it will be greater than or equal to
0
.
By default, Tumbler wraps when it reaches the top and bottom, as long as there are more items in the model than there are visible items; that is, when count 大于 visibleItemCount :
import QtQuick 2.12 import QtQuick.Window 2.2 import QtQuick.Controls 2.12 Rectangle { width: frame.implicitWidth + 10 height: frame.implicitHeight + 10 function formatText(count, modelData) { var data = count === 12 ? modelData + 1 : modelData; return data.toString().length < 2 ? "0" + data : data; } FontMetrics { id: fontMetrics } Component { id: delegateComponent Label { text: formatText(Tumbler.tumbler.count, modelData) opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2) horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pixelSize: fontMetrics.font.pixelSize * 1.25 } } Frame { id: frame padding: 0 anchors.centerIn: parent Row { id: row Tumbler { id: hoursTumbler model: 12 delegate: delegateComponent } Tumbler { id: minutesTumbler model: 60 delegate: delegateComponent } Tumbler { id: amPmTumbler model: ["AM", "PM"] delegate: delegateComponent } } } }
另请参阅 Customizing Tumbler and 输入控件 .
[read-only] count : int |
This property holds the number of items in the model.
currentIndex : int |
This property holds the index of the current item.
The value of this property is
-1
当
count
等于
0
. In all other cases, it will be greater than or equal to
0
.
另请参阅 currentItem and positionViewAtIndex() .
[read-only] currentItem : Item |
This property holds the item at the current index.
另请参阅 currentIndex and positionViewAtIndex() .
delegate : Component |
This property holds the delegate used to display each item.
model : variant |
This property holds the model that provides data for this tumbler.
moving : bool |
This property describes whether the tumbler is currently moving, due to the user either dragging or flicking it.
This property was introduced in QtQuick.Controls 2.2 (Qt 5.9).
visibleItemCount : int |
This property holds the number of items visible in the tumbler. It must be an odd number, as the current item is always vertically centered.
wrap : bool |
This property determines whether or not the tumbler wraps around when it reaches the top or bottom.
默认值为
false
当
count
小于
visibleItemCount
, as it is simpler to interact with a non-wrapping Tumbler when there are only a few items. To override this behavior, explicitly set the value of this property. To return to the default behavior, set this property to
undefined
.
该特性在 QtQuick.Controls 2.1 (Qt 5.8) 引入。
[read-only] Tumbler.displacement : real |
This attached property holds a value from
-visibleItemCount / 2
to
visibleItemCount / 2
, which represents how far away this item is from being the current item, with
0
being completely current.
For example, the item below will be 40% opaque when it is not the current item, and transition to 100% opacity when it becomes the current item:
delegate: Text { text: modelData opacity: 0.4 + Math.max(0, 1 - Math.abs(Tumbler.displacement)) * 0.6 }
[read-only] Tumbler.tumbler : Tumbler |
This attached property holds the tumbler. The property can be attached to a tumbler delegate. The value is
null
if the item is not a tumbler delegate.
void positionViewAtIndex ( int index , PositionMode mode ) |
Positions the view so that the index is at the position specified by mode .
例如:
positionViewAtIndex(10, Tumbler.Center)
若 wrap is true (the default), the modes available to PathView 's positionViewAtIndex() function are available, otherwise the modes available to ListView 's positionViewAtIndex() function are available.
注意:
There is a known limitation that using
Tumbler.Beginning
当
wrap
is
true
will result in the wrong item being positioned at the top of view. As a workaround, pass
index - 1
.
This method was introduced in QtQuick.Controls 2.5 (Qt 5.12).
另请参阅 currentIndex .