QML定制TabBar


定制一个vertical TabBar,即垂直的TabBar。QT默认的TabBar都是水平的,且定制其Tab项的背景及字体等颜色都比较麻烦。我们今天来定制一个如下效果的垂直TabBar

请添加图片描述

1、默认TabBar

默认的TabBar实现如下,是由一个TabBar加上一个StackLayout组合实现,StackLayout是一个栈布局,所谓栈布局简单来说就是同一时刻只能显示布局内的某一个栈元素,可以通过栈布局的currentIndex来控制显示哪一个页签。TabButton默认和TabBar配合使用,作为TabBar中的每一个独立的点击按钮存在。

TabBar {
	id: bar
	width: parent.width
	TabButton {
		text: qsTr("Home")
	}
	TabButton {
		text: qsTr("Discover")
	}
}

StackLayout {
	width: parent.width
	anchors.top: bar.bottom
	anchors.bottom: parent.bottom
	currentIndex: bar.currentIndex
	Rectangle {
		color: "red"
	}
	Rectangle {
		color: "yellow"
	}
}

上述的默认状态效果如下:

请添加图片描述

2、定制思路

采用一个ListView来完成。其实查阅TabBar的源码可以发现,源码本身也是使用一个ListView来作为它的一个contentItem项。

ListView有一个orientation属性用来指示列表是垂直的还是水平的,此处我们将其设置为ListView.Vertical垂直的,ListView.Vertical本身也是它的默认值,如果我们想使用水平的TabBar就可以把这个值改为ListView.Horizontal

我们主要定制ListView的代理delegate,一般将它指定为一个ItemDelegate即可。

ItemDelegate有两个项可以定制一个是背景颜色background,我们指定为一个Rectangle,然后设置它的color属性。另一个就是它的内容项contentItem,此处我们使用一个Rectangle,作为一个容器,可以设置背景颜色,同时在里面可以包含一个Text,用来显示我们文本数据。另外,如果要想要改变鼠标的手势,或者增加一些点击事件的处理,可以在ItemDelegate下增加一个MouseArea,填充整个父对象(即ItemDelegate)。

这里有一个关键问题就是,点击时如何做到tab的切换的?

ItemDelegate的点击时触发clicked信号,在onClicked的槽函数中将ListViewcurrentIndex属性赋值为index,其中indexdelegate代理的默认属性,表示当前的索引值,代码如下

onClicked: control.currentIndex = index

3、整体架构

定制的TabBar整体大致的代码架构如下所示:

delegate: ItemDelegate {
	text: modelData
	onClicked: control.currentIndex = index

	MouseArea {
		anchors.fill: parent
		acceptedButtons: Qt.NoButton
		cursorShape: Qt.PointingHandCursor
	}

	contentItem: Rectangle {
		anchors.fill: parent
		Text {
			anchors.fill: parent
			text: tabDelegate.text
		}
	}

	background: Rectangle {
		color: tabBackgroundColor
	}
}

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值