QT实现QML侧边导航栏的最简方法
作者:何名取 发布时间:2021-09-17 02:54:35
标签:QT,QML侧边导航栏
TabBar
在实际开发中导航栏是必不可少的控件,QtQuick Controls控件中可以使用TabBar来做导航栏,原始的导航栏是横向的,查找了其属性后发现无法直接设置为纵向的。本节将给小伙伴们介绍一种非常简单的实现实现QML侧边导航栏的最简方法。原始导航栏如下图:
属性列表
允许用户在不同的视图或子任务之间切换。标签栏提供了一个基于标签的导航模型。TabBar由TabButton控件填充,可以与任何提供currentIndex -属性的布局或容器控件一起使用,如StackLayout或SwipeView。
属性 | 类型 | 描述 |
---|---|---|
contentHeight | real | 此属性保存内容高度。它用于计算选项卡栏的隐式总高度。 |
contentWidth | real | 此属性保存内容宽度。它用于计算选项卡栏的隐式总宽度。 |
position | enumeration | 此属性保存选项卡栏的位置。 TabBar.HeaderTabBar.Footer |
附加属性 | 类型 | 描述 |
---|---|---|
index | int | 这个附加属性保存TabBar中每个选项卡按钮的索引。它被附加到TabBar的每个选项卡按钮上。 |
position | enumeration | 这个附加属性保存选项卡栏的位置。它被附加到TabBar的每个选项卡按钮上。 TabBar.HeaderTabBar.Footer |
tabBar | TabBar | 此附加属性保存管理此选项卡按钮的选项卡栏。它被附加到TabBar的每个选项卡按钮上。 |
示例代码
TabBar {
id: bar
width: parent.width
TabButton {
text: qsTr("Home")
}
TabButton {
text: qsTr("Discover")
}
TabButton {
text: qsTr("Activity")
}
}
StackLayout {
width: parent.width
currentIndex: bar.currentIndex
Item {
id: homeTab
}
Item {
id: discoverTab
}
Item {
id: activityTab
}
}
在TabBar中添加三个TabButton,点击TabButton可以实现对StackLayout中相应的Item的切换。
侧边导航栏
从position属性中可以看出,TabBar只能直接设置为顶部和底部,无法直接应用成侧边导航栏。此时,需要将 TabBar和TabButton的大小和位置进行调整,即可实现侧边导航栏。
修改代码
TabBar宽度影响自身和内部包含的TabButton的宽度。横向排列时,TabBar的宽度等于三个TabButton的宽度;纵向排列时,TabBar的宽度等于一个TabButton的宽度。
其次需要改变TabButton的宽度,高度以及排列的位置。横向排列时,TabButton的宽度大于高度;纵向排列时,为了美观,使TabButton的宽度小于高度。将所有TabButton都设置为首位相连,即第一个TabButton的bottom底部就是第二个TabButton的顶部。
TabBar {
id: bar
width: firstBtn.width
TabButton {
id: firstBtn
text: qsTr("Home")
width: root.width/8
height: root.height/3
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
}
TabButton {
id: secondBtn
text: qsTr("Discover")
width: root.width/8
height: root.height/3
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: firstBtn.bottom
}
TabButton {
id: thirdBtn
text: qsTr("Activity")
width: root.width/8
height: root.height/3
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: secondBtn.bottom
}
}
来源:https://juejin.cn/post/7091160073216491557


猜你喜欢
- 最近在项目过程中遇到了保存数据的需求,对实体类的部分数据进行保存,打算采用反射+自定义特性来实现数据保存,利于扩展1. 采用反射实现能够灵活
- 本文较为深入的分析了android中UI主线程与子线程。分享给大家供大家参考。具体如下:在一个Android 程序开始运行的时候,会单独启动
- 前言Java作为一种平台无关性的语言,其主要依靠于Java虚拟机——JVM,我们写好的代码会被编译成class文件,再由JVM进行加载、解析
- 本文实例为大家分享了java代码获取新浪微博应用的access token的具体代码,供大家参考,具体内容如下package test;im
- 什么是代理模式?代理模式:在调用处不直接调用目标类进行操作,而是调用代理类,然后通过代理类来调用目标类进行操作。在代理类调用目标类的前后可以
- 本文实例讲述了Android编程实现全局获取Context及使用Intent传递对象的方法。分享给大家供大家参考,具体如下:一、全局获取 C
- 我们先回顾下,什么是指针?什么是常量?指针是一种特殊的变量,它里面存储的内容是内存地址。常量是指其里面存储的内容不能发生改变的量。明白了这两
- 简介Log4J 是 Apache 的一个开源项目(官网 http://jakarta.apache.org/log4j)
- 本文实例讲述了Android AutoCompleteTextView控件基本用法。分享给大家供大家参考,具体如下:当输入部分内容之后会有相
- 1.需要的Maven依赖// 支付宝<dependency> <groupId>com.alipay.
- 1.问题描述汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚
- SEATA概要seata 是alibaba 出的一款分布式事务管理器,他有侵入性小,实现简单等特点。我们能够使用seata 实现分布式事务管
- 1、普通用户与系统管理员用户的权限要有严格的区分。如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许
- 为什么需要组件化小项目是不需要组件化的。当一个项目有数十个人开发,编译项目要花费10分钟,修改一个bug就可能会影响到其他业务,小小的改动就
- 在定义API的时候,对于一些返回集合对象的方法,很多人喜欢将返回类型定义成IEnumerable<T>,这本没有什么问题。这里要
- private void btnSave_Click(object sender, RoutedEventArgs e)
- 1.Nuget搜索Tesseract2.项目安装Tesseract3.引用命名空间using Tesseract;4.上Github下载别人
- spring-boot-maven-plugin:打包时排除provided依赖spring-boot-maven-plugin 插件提供s
- 前言最近有个网友问了我一个问题:系统中大事务问题要如何处理?正好前段时间我在公司处理过这个问题,我们当时由于项目初期时间比较紧张,为了快速完
- Android 调用百度地图API一、到 百度地图开发平台下载SDKhttp://lbsyun.baidu.com/index.php?ti