QML类型:Flickable
一、描述
Flickable 项将其子项放置在可以拖动和轻弹的表面上,从而使得子项上的视图滚动。
在传统的用户界面中,可以使用标准控件(例如滚动条和箭头按钮)滚动视图。在某些情况下,也可以在移动光标的同时按住鼠标按钮直接拖动视图。在基于触摸的用户界面中,这种拖动动作通常与轻弹动作相辅相成,在用户停止触摸视图后继续滚动。
Flickable 不会自动裁剪其内容。如果它不用作全屏项,则应考虑将 clip 属性设置为 true。
二、使用示例
以下示例显示了大图像上的小视图,用户可以在其中拖动或轻拂图像以查看图像的不同部分。
import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 400;height: 400;title: "hello world"Flickable{anchors.fill: parentcontentWidth: image.widthcontentHeight: image.heightImage{id: imagesource: "qrc:/img/a.jpg"}}
}
声明为 Flickable 的子项的项会自动成为 Flickable 的 contentItem 的父项。
三、contentX and contentY示例
下图演示了在各个方向上轻弹的可轻弹以及由此产生的 contentX 和 contentY 值。蓝色方块代表可轻弹的内容,黑色边框代表可轻弹的边界。
四、限制
由于实现细节,放置在 Flickable 内的项目不能锚定到 Flickable。其中的项目锚定时使用的 parent指的是 Flickable 的 contentItem。contentItem 的大小由 contentWidth 和 contentHeight 决定。
五、属性成员
1、moving : bool
movingHorizontally : bool
movingVertically : bool
当用户拖动或轻弹视图时,视图当前是否在水平、垂直或任一方向移动。
2、dragging : bool
draggingHorizontally : bool
draggingVertically : bool
当用户拖动视图时,视图当前是否在水平、垂直或任一方向移动。
3、flicking : bool
flickingHorizontally : bool
flickingVertically : bool
当用户轻弹视图,视图当前是否在水平、垂直或任一方向移动。
4、originX : real
originY : real
这些属性保存content的来源。无论布局方向如何,此值始终是指content的左上角位置。
5、bottomMargin : real
leftMargin : real
rightMargin : real
topMargin : real
这些属性保留content周围的边距。
6、contentHeight : real
contentWidth : real
content的尺寸(由 Flickable 控制的表面)。
7、atXBeginning : bool
atXEnd : bool
atYBeginning : bool
atYEnd : bool
flickable 视图是否分别位于开头或结尾。
8、horizontalVelocity : real
verticalVelocity : real
沿 x 轴和 y 轴的瞬时移动速度,以像素/秒为单位。
9、contentX : real
contentY : real
这些属性保存当前位于 Flickable 左上角的表面坐标。 例如,如果将图像向上滑动 100 像素,则 contentY 将增加 100。
10、boundsBehavior : enumeration
content 是否可以在拖动、轻弹时超出 Flickable 的边界。
当 boundsMovement 为 Flickable.FollowBoundsBehavior 时,Flickable.StopAtBounds 以外的值会让人感觉视图的边缘是软的,而不是硬的物理边界。
- Flickable.StopAtBounds:拖动、轻弹都不能。
- Flickable.DragOverBounds:拖动可以,轻弹不能。
- Flickable.OvershootBounds:轻弹可以,拖动不能。
- Flickable.DragAndOvershootBounds:默认。拖动、轻弹都可以。
11、boundsMovement : enumeration
Flickable 是否会让人感觉视图的边缘是软的,而不是硬的物理边界。
- Flickable.StopAtBounds:允许实现自定义边缘效果,其中 content 不跟随拖动或轻弹超出可轻弹的边界。horizontalOvershoot 和 verticalOvershoot 的值可用于实现自定义边缘效果。
- Flickable.FollowBoundsBehavior:默认,content 是否跟随拖动或轻弹超出 flickable 的边界由 boundsBehavior 决定。
以下示例将内容保持在边界内,而是在水平边界上轻弹时应用翻转效果:
import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 400;height: 400;title: "hello world"Flickable{anchors.fill: parentcontentWidth: image.widthcontentHeight: image.heightImage{id: imagesource: "qrc:/img.jpg"}id: flickableboundsMovement: Flickable.StopAtBoundsboundsBehavior: Flickable.DragAndOvershootBoundstransform: Rotation{axis { x: 0; y: 1; z: 0 }origin.x: flickable.width / 2origin.y: flickable.height / 2angle: Math.min(30, Math.max(-30, flickable.horizontalOvershoot))}}
}
下面的示例将内容保持在边界内,而是在垂直边界上拖动时应用不透明效果:
import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 400;height: 400;title: "hello world"Flickable{anchors.fill: parentcontentWidth: image.widthcontentHeight: image.heightImage{id: imagesource: "qrc:/img.jpg"}id: flickableboundsMovement: Flickable.StopAtBoundsboundsBehavior: Flickable.DragOverBoundsopacity: Math.max(0.5, 1.0 - Math.abs(verticalOvershoot) / height)}
}
12、contentItem : Item
包含要在 Flickable 中移动的项目的内部项目。
声明为 Flickable 的子项的项会自动成为 Flickable 的 contentItem 的父项。
动态创建的项目需要明确作为 contentItem 的父级:
Flickable
{id: myFlickablefunction addItem(file) {var component = Qt.createComponent(file)component.createObject(myFlickable.contentItem);}
}
13、flickDeceleration : real
此属性保存轻弹的减速速率:数字越大,当用户通过触摸、触摸板或鼠标滚轮停止轻弹时,它减慢的速度就越快。 例如 0.0001 几乎是“无摩擦”,而 10000 感觉很“粘”。
默认值取决于平台。 不允许为零或更小的值。
14、flickableDirection : enumeration
此属性确定可以轻弹视图的方向。
- Flickable.AutoFlickDirection:默认,如果 contentHeight 不等于 Flickable 的高度,则允许垂直滑动。如果 contentWidth 不等于 Flickable 的宽度,则允许水平滑动。
- Flickable.AutoFlickIfNeeded:如果 contentHeight 大于 Flickable 的高度,则允许垂直滑动。 如果 contentWidth 大于 Flickable 的宽度,则允许水平滑动。
- Flickable.HorizontalFlick:允许水平轻弹。
- Flickable.VerticalFlick:允许垂直轻弹。
- Flickable.HorizontalAndVerticalFlick:允许在两个方向上轻弹。
15、horizontalOvershoot : real
verticalOvershoot : real
水平过冲 / 垂直过冲,即 contents 被拖动或轻弹超过可轻弹边界的水平距离 / 垂直距离。
16、interactive : bool
是否可以与 Flickable 交互。用户不能拖动或轻弹非交互式的 Flickable。默认为 true。
此属性对于暂时禁用轻弹很有用。这允许与 Flickable 的子项进行特殊互动。例如,可能希望在滚动浏览作为 Flickable 子项的弹出对话框时冻结可滑动地图。
17、maximumFlickVelocity : real
可以以像素/秒为单位轻弹视图的最大速度。默认值取决于平台。
18、pixelAligned : bool
此属性将 contentX 和 contentY 的对齐方式设置为像素 (true) 或子像素 (false)。
启用 pixelAligned 以优化具有高对比度边缘的静止内容或移动内容,例如一像素宽的线条、文本或矢量图形。优化动画质量时禁用 pixelAligned。默认值为false。
19、pressDelay : int
此属性保存向 Flickable 的子项发送一个按压(press)信号的延迟时间 (ms)。在轻弹动作之前对按压做出反应会产生不良影响的情况下,这可能很有用。
如果在延迟超时之前拖动/轻弹可轻弹,则不会传递按下事件。如果在超时时间内释放按钮,则按下和释放都将传递。
请注意,对于设置了 pressDelay 的嵌套 Flickable,外部 Flickable 的 pressDelay 会被最里面的 Flickable 覆盖。如果拖动超过平台拖动阈值,则无论此属性如何,都将传递按下事件。
20、rebound : Transition
当内容视图重新回到可轻弹的边界时要应用于内容视图的过渡。当视图被轻弹或拖过内容区域的边缘时,或者当 returnToBounds() 被调用时,就会触发转换。
当视图被轻弹超出其边界时,它将使用指定的过渡返回到其边界:
import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 400;height: 400;title: "hello world"Flickable{width: 150; height: 150contentWidth: 300; contentHeight: 300rebound: Transition{NumberAnimation{properties: "x,y"duration: 1000easing.type: Easing.OutBounce}}Rectangle{width: 300; height: 300gradient: Gradient{GradientStop { position: 0.0; color: "lightsteelblue" }GradientStop { position: 1.0; color: "blue" }}}}
}
21、synchronousDrag : bool
如果此属性设置为 true,则当鼠标或触摸点移动到足够远以开始拖动 content 时,content 将跳跃,这样按下时位于光标或触摸点下方的内容像素仍保留在该点下方。
默认值为 false,它提供更流畅的体验(无跳跃),代价是在开始时“丢失”了一些拖动距离。
22、可见区域组
visibleArea.heightRatio : real
visibleArea.widthRatio : real
visibleArea.xPosition : real
visibleArea.yPosition : real
当前可见区域的位置和大小。visibleArea.widthRatio、visibleArea.heightRatio为当前可见的完整视图的宽高百分比,值的范围:0.0 - 1.0。
visibleArea.xPosition、visibleArea.yPosition 范围: 0.0 - 1.0 减去尺寸比。即 yPosition 在 0.0 - (1.0 - heightRatio)的范围内。
content 可能会被拖到正常范围之外,从而导致页面位置也在正常范围之外。
这些属性通常用于绘制滚动条。例如:
ScrollBar.qml
import QtQuick 2.0Rectangle
{width: 640height: 480Flickable{id: viewanchors.fill: parentcontentWidth: picture.widthcontentHeight: picture.heightImage{id: picturesource: "pics/niagara_falls.jpg"asynchronous: true}states: State{name: "ShowBars"when: view.movingVertically || view.movingHorizontallyPropertyChanges { target: verticalScrollBar; opacity: 1 }PropertyChanges { target: horizontalScrollBar; opacity: 1 }}transitions: Transition{NumberAnimation { properties: "opacity"; duration: 400 }}}ScrollBar{id: verticalScrollBarwidth: 12; height: view.height-12anchors.right: view.rightopacity: 0orientation: Qt.Verticalposition: view.visibleArea.yPositionpageSize: view.visibleArea.heightRatio}ScrollBar{id: horizontalScrollBarwidth: view.width-12; height: 12anchors.bottom: view.bottomopacity: 0orientation: Qt.Horizontalposition: view.visibleArea.xPositionpageSize: view.visibleArea.widthRatio}
}
main.qml
import QtQuick 2.0Rectangle
{width: 640height: 480Flickable{id: viewanchors.fill: parentcontentWidth: picture.widthcontentHeight: picture.heightImage{id: picturesource: "pics/niagara_falls.jpg"asynchronous: true}states: State{name: "ShowBars"when: view.movingVertically || view.movingHorizontallyPropertyChanges { target: verticalScrollBar; opacity: 1 }PropertyChanges { target: horizontalScrollBar; opacity: 1 }}transitions: Transition{NumberAnimation { properties: "opacity"; duration: 400 }}}ScrollBar{id: verticalScrollBarwidth: 12; height: view.height-12anchors.right: view.rightopacity: 0orientation: Qt.Verticalposition: view.visibleArea.yPositionpageSize: view.visibleArea.heightRatio}ScrollBar{id: horizontalScrollBarwidth: view.width-12; height: 12anchors.bottom: view.bottomopacity: 0orientation: Qt.Horizontalposition: view.visibleArea.xPositionpageSize: view.visibleArea.widthRatio}
}
六、信号成员
1、flickEnded()
当视图因轻弹而停止移动时发出此信号。
2、flickStarted()
当视图被轻弹时发出这个信号。轻弹从鼠标或触摸被释放时开始。
3、movementEnded()
当视图由于用户交互或生成的 flick() 而停止移动时会发出此信号。
4、movementStarted()
当视图由于用户交互或生成的 flick() 而开始移动时会发出此信号。
七、成员函数
1、cancelFlick()
取消当前的轻弹动画。
2、flick(qreal xVelocity, qreal yVelocity)
使用 xVelocity 水平滑动内容,yVelocity 垂直滑动(以像素/秒为单位)。
调用此方法会更新相应的移动和轻弹属性和信号,就像真正的轻弹一样。
3、resizeContent(real width, real height, QPointF center)
将 content 的大小调整为围绕中心的 width * height。
这不会缩放 Flickable 的内容 - 它只会调整 contentWidth 和 contentHeight。
调整 content 大小可能会导致内容位于 Flickable 的边界之外。调用 returnToBounds() 会将 content 移回合适范围内。
4、returnToBounds()
确保 content 在合适范围内。
QML类型:Flickable相关推荐
- QML类型:ListView
一.描述 ListView 继承自 Flickable,用作显示来自内置 QML 类型(如 ListModel 和 XmlListModel)或从 QAbstractItemModel 或 QAbst ...
- QML类型——ListView
正文 为列表模型(ListModel)的所有元素提供列表视图. 详细说明 ListView显示内置QML类型(例如ListModel和XmlListModel)创建的模型数据,或者使用C++定义的自定 ...
- Qt 从C ++定义QML类型(二)
前言 在上一篇文章中介绍了如何注册一个C++的可实例化的对象类型供 QML 中使用,那么今天继续之前的文章介绍. 正文 注册不可实例化类型 有时候QObject派生类可能需要在QML类型系统中注册,但 ...
- Qt 从C ++定义QML类型(一)
概述 前面几篇文章介绍了如何在 QML 中调用 C++ 属性,那么这里集中总结一下如何在 C++中定义 QML 类型,其实在之前的示例中已经有用到过的. 当用C ++代码扩展QML时,可以向QML类型 ...
- 从C ++定义QML类型
从C ++定义QML类型 从C ++定义QML类型 向QML类型系统注册C ++类型 注册可实例化对象类型 注册非实例类型 用单例类型注册单例对象 类型修订和版本 注册扩展对象 定义特定于QML的类型 ...
- ObjectModel QML类型
ObjectModel QML类型 ObjectModel QML类型 特性 附属物业 方法 详细说明 Property Documentation Attached Property Documen ...
- ListModel QML类型
ListModel QML类型 ListModel QML类型 特性 方法 详细说明 用法示例 修改列表模型 将线程列表模型与WorkerScript一起使用 Property Documentati ...
- ListElement QML类型
ListElement QML类型 ListElement QML类型 详细说明 引用角色 用法示例 ListElement QML类型 在ListModel中定义一个数据项. Import Stat ...
- DelegateModelGroup QML类型
DelegateModelGroup QML类型 DelegateModelGroup QML类型 特性 讯号 方法 详细说明 Property Documentation 计数:整数 include ...
- DelegateModel QML类型
DelegateModel QML类型 DelegateModel QML类型 Properties Attached Properties Methods 详细说明 Property Documen ...
最新文章
- ajax和map返回数据类型,ajax请求后台返回map类型并如何展示
- 算法工程师的落地能力具体指的是什么?
- wincc里c语言long int,WinCC V7.3_C脚本手册.pdf
- Linux系统分区和挂载浅谈
- 教你利用python处理文本
- 云存储应用是视频监控系统发展的必然需求
- 程序员穿衣是怎么变得越来越丑的
- Sql 语句里 As后的竟然可以和前边的字段重名
- 全球AMR调度系统分析(RMS、TMS)
- 关于计算机的小故事英语作文,关于小故事英语作文阅读
- 错误的robots文件设置对SEO的影响
- NepCTF2022 Writeup
- android中view手势滑动冲突的两种解决方法
- 计算机毕业设计-基于神经网络APP-整合Vue+SpringBoot+TensorFlow框架-诗联AI
- 协同设计与传统设计方法的比较
- screen 远程终端不中断
- android 磨砂玻璃效果
- 给大家介绍一下地推的认知
- 编写一个VSCode插件
- windows搭建go语言开发环境