前言不知道大家注意过没有,现在很多网站上对于界面的跳转,都更倾向于滑动跳转。这种方式更加柔和,使得人的观感会好一些。而我们这一节要学习的是一个导航模型SwipeView,它提供一个基于滑动的导航模型,使得用户可以通过侧向滑动来浏览界面。SwipeView的属性属性
附加属性
SwipeView的例程SwipeView的用法也十分简单,需要为其填充一组页面Page或者是其他的控件,每次可见这组页面中的一页,我们可以通过鼠标左右滑动来在页面之间导航。import QtQuick 2.7 import QtQuick.Window 2.2 import QtQuick.Controls 2.3 Window { visible: true width: 640 height: 480 title: qsTr("SwipeView") SwipeView { id: view currentIndex: 0 anchors.fill: parent orientation: Qt.Horizontal interactive: true Rectangle { id: firstPage color: "purple" Text { text: qsTr("First") anchors.centerIn: parent font.pixelSize: 25 } } Rectangle { id: secondPage color: "blue" Text { text: qsTr("Second") anchors.centerIn: parent font.pixelSize: 25 } } Rectangle { id: thirdPage color: "green" Text { text: qsTr("Third") anchors.centerIn: parent font.pixelSize: 25 } } } } 为SwipeView填充一组矩形充当界面,将当前页currentIndex设置为0,也就是第一页。设置其方向orientation为水平方向,意味着是左右滑动,当设置为Qt.Vertical时,就是上下滑动。最后设置interactive为交互式,其实这个不需要设置,默认为true,当设置为false时,我们就不能通过滑动切换页面了。看一下效果。 事实上,我们还是建议大家在填充SwipeView的时候选择的是Page组件,Page是一个容器控件,可以方便地将页眉和页脚项添加到页面。它的三个重要属性footer、header、title分别对应着页脚、页眉和标题栏。因为我们的SwipeView本身是不可见的,需要为其设置指示才可以知道当前是第几页。通过page的属性我们可以设置指示栏。 将上述代码中的Rectangle修改为Page,每个Page中除了Text的内容不一样,其他的代码都是一样的。我们就不贴全部的代码了,以第一个Page为例,设置其页眉和页脚,代码如下: Page{ header: Rectangle{ height: 80 color: "orange" Text{ anchors.centerIn: parent text: "First" font.pixelSize: 25 } } footer: Rectangle{ height: 30 color: "orange" } } 一般,我们会将将ToolBar,TabBar或DialogButtonBox分配为页面页脚,但是因为这些控件我们还没学到,所以,这里就用到了最简单的Rectangle。为header页眉设置一个矩形,矩形内设置文字指示当前页面。页脚footer就是一个橘黄色的矩形。其实大家也可以设置Page的title和内容物,使得界面更加丰富完整,我们这里就先不拓展了,剩下的几个页面大家可以自己进行设置。看一下效果。 页面指示符PageIndicator除了上面通过页眉、标题或者内容来指示当前页之外,QML还提供了一种更为简单的指示当前活动页面的控件,它就是页面指示符PageIndicator。页面指示符通常很小(为了避免使用户从用户界面的实际内容中分散注意力)。它们可能难以点击,并且可能不容易被用户识别为交互式。所以,它们最好用于补充主要的导航方法(例如SwipeView),而不是单独使用。它的属性非常简单。主要包括:
我们还是以第一个例程为基础,学习一下PageIndicator的使用。 SwipeView { id: view currentIndex: pageIndicator.currentIndex anchors.fill: parent orientation: Qt.Horizontal interactive: true Rectangle { id: firstPage color: "purple" Text { text: qsTr("First") anchors.centerIn: parent font.pixelSize: 25 } } Rectangle { id: secondPage color: "blue" Text { text: qsTr("Second") anchors.centerIn: parent font.pixelSize: 25 } } Rectangle { id: thirdPage color: "green" Text { text: qsTr("Third") anchors.centerIn: parent font.pixelSize: 25 } } } PageIndicator{ id: pageIndicator interactive: true count: view.count currentIndex: view.currentIndex anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter } 通过前面属性的设置大家应该也很容易明白,设置interactive为交互式,设置count为SwipeView的页面数,设置currentIndex为当前页面。我们想要实现按动PageIndicator实现页面的切换,所以还需设置SwipeView的currentIndex为指示符指示的当前页,这样就实现乐两者的交互。是不是很简单?看一下结果。 效果上和之前单纯使用SwipeView差不多,但是页面下方多了几个小圆点,这个就是指示符,通过指示符,我们可以清楚的看到一共有多少个页面和当前在第几个页面。我们还可以自己设置指示符的外观,PageIndicator有三个可视化项,分别是background, content item, and delegate,我们看一下官方例程了解一下怎么自定义PageIndicator。 PageIndicator { id: control anchors.centerIn: parent count: 5 currentIndex: 2 delegate: Rectangle { implicitWidth: 8 implicitHeight: 8 radius: width / 2 color: "#21be2b" opacity: index === control.currentIndex ? 0.95 : 0.45 } } 可以看到设置了页数为5,当前页是第三页,注意,currentIndex是从0开始的。然后设置PageIndicator的委托delegate,也就是一个个的小圆点,这里有一个opacity透明度需要说一下,它的设置是需要判断一下的,当前页面指示符的透明度就是0.95,其他页面指示符的透明度为0.45。运行看一下效果。 总结源码:21.zip |