在上章我们学习了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版本的更多相关文章

  1. Android-通过SlidingMenu高仿微信6.2最新版手势滑动返回(二)

    转载请标明出处: http://blog.csdn.net/hanhailong726188/article/details/46453627 本文出自:[海龙的博客] 一.概述 在上一篇博文中,博文 ...

  2. 28.qt quick-ListView高仿微信好友列表和聊天列表

    1.视图模型介绍  在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或Q ...

  3. Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)

    近期更新了微信版本号到6.2.发现里面有个很好的体验,就是在第二个页面Activity能手势向右滑动返回,在手势滑动的过程中能看到第一个页面,这样的体验很赞,这里高仿了一下. 这里使用的是v4包里面的 ...

  4. Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...

  5. Qt Quick之StackView具体解释(1)

    Qt Quick中有个StackView.我在<Qt Quick核心编程>一书中没有讲到.近期有人问起,趁机学习了一下,把它的基本使用方法记录下来. 我准备分两次来讲.第一次讲主要的使用方 ...

  6. Qt 学习之路 :Qt Quick Controls

    自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位.很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮.菜单等.虽然移动领域,这些组件已经变 ...

  7. Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)

    Qt Quick Controls 原本是为支持桌面平台而开发的,后来又加入了移动平台和嵌入式平台的支持.它们应用非常广泛,因为它们提供了足够灵活的样式系统,以允许开发具有平台相关或者无关风格的应用程 ...

  8. Qt Quick实现的疯狂算数游戏

    使用 Qt Quick 写了个小游戏:疯狂算数.支持 Windows 和 Android 两个平台. 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QM ...

  9. Qt Widgets、QML、Qt Quick的区别

    Qt Widgets.QML.Qt Quick的区别 简述 看了之前关于 QML 的一些介绍,很多人难免会有一些疑惑: Q1:QML 和 Qt Quick 之间有什么区别? Q2:QtQuick 1. ...

随机推荐

  1. Qt链接MySQL发布后Drive not loadedDrive not loaded怎么办

    缺少动态链接库!把MySQL文件夹下面带dll.lib的全复制进去就行了

  2. pysmiles:一个用于读写SMILES表达式的python库

    技术背景 SMILES表达式是化学里面常用的用于标定元素之间关系的字符串,旨在用最简短的语句来完整的表达一个分子体系内所蕴含的基本信息,比如元素.连接性以及连接属性等.由于SMILES表达式的定义种类 ...

  3. Eclipse中System.out.println()快捷键生成方法

    输入syso,再按ALT+/,如果不显示,就在输入完整一行   System.out.println();  之后点击5次shift键,显示是否使用粘滞键,点击是,  再输入sout,再按ALT+/ ...

  4. Codeforces Round #660 (Div. 2)

    A. Captain Flint and Crew Recruitment 题意:定义了一种数(接近质数),这种数可以写成p*q并且p和q都是素数,问n是否可以写成四个不同的数的和,并且保证至少三个数 ...

  5. 『动善时』JMeter基础 — 17、JMeter配置元件【HTTP请求默认值】

    目录 1.HTTP请求默认值介绍 2.HTTP请求默认值界面 3.HTTP请求默认值的使用 (1)用于演示的项目说明 (2)测试计划内包含的元件 (3)说明HTTP请求默认值用法 4.总结 5.拓展知 ...

  6. .NET程序崩溃了怎么抓 Dump ? 我总结了三种方案

    一:背景 1. 讲故事 最近几天接到了几个crash的求助,可能这几个朋友没玩过怎么去生成dump,只能手把手教,感觉也不是一个办法,所以有必要总结一下,后续再有朋友咨询的话,我就可以把这篇文章丢过去 ...

  7. Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题

    Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题 Debian9.4系统不能再VIM打开文件界面不能使用右键复制粘贴 root@debian:~# vim /usr/sh ...

  8. libvirtd 启动成功,但却没有监听

    现象: 执行 systemctl start libvirtd在其它机器上进行测试是否监听:virsh -c qemu+tcp://host/system libvirtd启动成功,没有报错,但却没有 ...

  9. Windows 10 创建虚拟网卡

    想把虚拟机桥接到我的电脑,但我连的是无线网电脑没查网线,所以就创建个虚拟网卡吧. 1.win + x 打开设备管理器 2.网络适配器  + 操作 + 添加过时硬件  3.下一步  4.选-->安 ...

  10. centos 7安装freescale交叉编译工具链

    方法1:可以直接下载gcc包,把文件夹放到/usr/local下即可,然后修改PATH环境变量,既可以使用 方法2:可以下载.rpm包,在本地进行安装,下载地址为(http://www.panduod ...