31.qt quick-使用SwipeView添加滑动视图-高仿微信V2版本
在上章我们学习了ListView,然后实现了: 28.qt quick-ListView高仿微信好友列表和聊天列表,本章我们来学习SwipeView滑动视图,并出高仿微信V2版本:

1.Container介绍
由于SwipeView继承于Container,而Container是一个抽象的容器类.所以我们先来学习下Container
Container类的子类有:DialogButtonBox(对话框按钮框), MenuBar(菜单栏), SwipeView(滑动视图),TabBar、如下图所示:

Properties
- contentChildren : list<Item>,保存容器中的item所有项,与contentData不同,contentChildren只包括可视化的QML对象。当插入或移动项目时,它将重新排序。
- contentData : list<Object>,保存容器中的所有数据列表,包含使用addItem()或者insertItem()方法动态添加或插入的项。与contentChildren不同,contentData包含了所有对象,并且插入或移动项目时,不会重新排序。
- contentHeight : real,此属性保存内容高度。用于计算容器的总隐式高度。除非显式赋值它,否则内容高度将根据容器中项目的隐式高度自动计算。
- contentWidth : real,和contentHeight一样,此属性保存内容高度
- contentModel : model,只读属性,此属性保存item的内容模型。
- count : int,只读属性,获取item数量
- currentIndex : int,当前item索引号
- currentItem : Item ,只读属性,当前item
Methods
- void addItem(item),添加一个item
- void decrementCurrentIndex(),递减容器的当前索引
- void incrementCurrentIndex(),递增容器的当前索引
- void insertItem(index, Item item),在index处插入一个item
- Item itemAt(index),获取指定index处的item
- void moveItem(from, int to),移动item从from索引到to索引位置
- void removeItem(item),删除容器中指定的item
- void setCurrentIndex(index),删除容器中指定索引的item
- Item takeItem(index),删除并返回指定索引的item
2.SwipeView介绍
SwipeView(滑动视图)通过一组页面填充,每次只显示一个页面。用户可以通过横向滑动在页面之间导航,一般会将它与PageIndicator结合使用.
它的属性如下所示:
- horizontal : bool,只读属性,此属性保存滑动视图是否水平方向的
- interactive : bool,默认为true,表示用户可以滑动视图
- orientation : enumeration,滑动视图方向,默认为Qt.Horizontal
- vertical : bool ,只读属性,此属性保存滑动视图是否垂直方向的
它的Attached Properties附加属性如下所示:
- index : int,此附加属性保存SwipeView中每个子项的索引。它附加到SwipeView的每个item项中。
- isCurrentItem : bool,如果此子项是当前项,则此附加属性为true。它附加到SwipeView的每个item项中。
- isNextItem : bool,如果此子项是下一项,则此附加属性为true。它附加到SwipeView的每个item项中。
- isPreviousItem : bool如果此子项是上一个项目,则此附加属性为true。它附加到SwipeView的每个item项中。
- view : SwipeView 此附加属性保存管理此子项的视图。它附加到SwipeView的每个item项。
使用SwipeView时,一般会将它与PageIndicator结合使用.PageIndicator用于标志在多个页面的容器时,当前活动的页面是哪个小圆圈.
示例代码如下所示:
Window {
id: window
width: 400
height: 400
visible: true
SwipeView {
id: view
currentIndex: 1
anchors.fill: parent
Rectangle {
id: firstPage
color: "red"
}
Rectangle {
id: secondPage
color: "yellow"
}
Rectangle {
id: thirdPage
color: "blue"
}
}
PageIndicator {
id: indicator
count: view.count
currentIndex: view.currentIndex
anchors.bottom: view.bottom
anchors.horizontalCenter: parent.horizontalCenter
}
}
效果如下所示所示:

3.SwipeView实战
为了方便后续更加方便添加模块,所以我们还需要重构之前V1版本整个文件目录结构,重构后的文件夹如下所示:

接下来我们就在我们之前v1版本里面添加一个Page.qml,通过SwipeView实现切换微信主界面每页列表, Page.qml如下所示:
import QtQuick 2.12
import Qt.labs.folderlistmodel 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
import "qrc:/bar" as Bars
import "qrc:/recentFirend" as RencentFirend Rectangle {
id: container
anchors.fill: parent ListModel { // 最近好友列表
id: recentFirendModel
// 格式如下所示:
// 'name' : 好友名称
// 'headSrc' : 头像位置
// 'recode'(聊天记录) : [date(时间), msgType(hint提示、hintDate时间提示、recv接受提示、send发送提示), msg(信息内容)]
} ColumnLayout {
id: pageList
anchors.fill: parent
spacing: 0
SwipeView {
id: view
currentIndex: 0
Layout.fillHeight: true
Layout.fillWidth: true
interactive: false
RencentFirend.RecentFirendList {
id: recentFirendList
onNewFirendRequest: {
addExample()
}
onEnterRequest: {
var obj = newJumpWindow("qrc:/chat/ChatList.qml", recentFirendModel.get(index));
console.log("",recentFirendModel.get(index).name)
obj.show();
}
Component.onCompleted: {
recentFirendList.setModel(recentFirendModel)
}
}
Rectangle {
Text {
text: "Page2"
anchors.centerIn: parent
font.pixelSize: 24
font.family: "Microsoft Yahei"
}
}
Rectangle {
Text {
text: "Page3"
anchors.centerIn: parent
font.pixelSize: 24
font.family: "Microsoft Yahei"
}
}
Rectangle {
Text {
text: "Page4"
anchors.centerIn: parent
font.pixelSize: 24
font.family: "Microsoft Yahei"
}
} onCurrentIndexChanged: {
menuBar.swipeIndex(currentIndex)
} }
Bars.MenuBar {
id: menuBar
Layout.fillHeight: false
Layout.fillWidth: true
Layout.preferredHeight: 60
onIndexClicked: {
view.currentIndex = index } }
}
... ...
}
最终效果如下所示(支持自适应布局):

代码已上传群里, 未完待续, 后续出 微信V3版-添加通讯录列表控件(通过字典树实现中文转拼音排序)
31.qt quick-使用SwipeView添加滑动视图-高仿微信V2版本的更多相关文章
- Android-通过SlidingMenu高仿微信6.2最新版手势滑动返回(二)
转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/46453627 本文出自:[海龙的博客] 一.概述 在上一篇博文中,博文 ...
- 28.qt quick-ListView高仿微信好友列表和聊天列表
1.视图模型介绍 在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或Q ...
- Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)
近期更新了微信版本号到6.2.发现里面有个很好的体验,就是在第二个页面Activity能手势向右滑动返回,在手势滑动的过程中能看到第一个页面,这样的体验很赞,这里高仿了一下. 这里使用的是v4包里面的 ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- Qt Quick之StackView具体解释(1)
Qt Quick中有个StackView.我在<Qt Quick核心编程>一书中没有讲到.近期有人问起,趁机学习了一下,把它的基本使用方法记录下来. 我准备分两次来讲.第一次讲主要的使用方 ...
- Qt 学习之路 :Qt Quick Controls
自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位.很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮.菜单等.虽然移动领域,这些组件已经变 ...
- Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)
Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持.它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程 ...
- Qt Quick实现的疯狂算数游戏
使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QM ...
- Qt Widgets、QML、Qt Quick的区别
Qt Widgets.QML.Qt Quick的区别 简述 看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑: Q1:QML 和 Qt Quick 之间有什么区别? Q2:QtQuick 1. ...
随机推荐
- 【JavaScript】Leetcode每日一题-递增顺序搜索树
[JavaScript]Leetcode每日一题-递增顺序搜索树 [题目描述] 给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没 ...
- 【maven】pom.xml中"spring-boot-maven-plugin"报红问题
问题原因 插件下载速度太慢了,即是从国外的中央仓库里下载的. 没有刷新maven spring-boot-maven-plugin没加版本号(有些电脑不加版本号,也是不会爆红的) 问题解决 maven ...
- layui中的分页laypage
1.html部分 <div id="test1"></div> 2.js部分: <script src="/static/build/lay ...
- HDU - 2091 空心三角形 水题,但是有点坑...
空心三角形 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- centos 7.6 安装最新版docker 19.03
systemctl stop docker rpm -qa | grep docker 看到那个删除那个yum erase docker \ docker-client \ docker-client ...
- Nacos C++客户端开发文章
前段时间关注了下阿里巴巴发起的开源项目Nacos,这是一个注册.配置中心(Naming And Config),支持各种语言的客户端,但是唯独没有C++的,考虑到以前做过一段时间的C++程序员,不禁一 ...
- Iterable 和 Iterator
可以被for循环输出的为iterable (可迭代对象) 可以被next()调用并不断返回下一个数据的对象为iterator迭代器(python一切皆对象) 数据流,无法知晓其终点,只能推过next不 ...
- 『政善治』Postman工具 — 12、Postman中实现数据驱动
目录 1.什么是数据驱动? 2.测试集说明 3.创建请求与准备数据文件 (1)新增学院结果文档内容如下 (2)编写数据文件 (3)在Postman中创建请求 4.实现Postman中的数据驱动 步骤1 ...
- [bug] MySQL 无法删除表
参考 https://blog.csdn.net/smbluesky/article/details/82427121
- [转发]Linux性能测试工具之Lmbench特性、安装及使用
Linux性能测试工具之Lmbench特性.安装及使用2015年07月16日 10:13:48 Michaelwubo 阅读数:2466Linux性能测试工具Lmbench 是一套简易可移植的,符合A ...