Qt关于tabwidget的使用及注意事项

2023-05-16

Qt关于tabwidget的使用及注意事项


版本说明

版本作者日期备注
0.1loon2018.11.12初稿

目录

文章目录

  • Qt关于tabwidget的使用及注意事项
    • 版本说明
    • 目录
    • 一、需求和目的
    • 二、了解QTabWIDget类及用法
      • 1、详细描述
      • 2、注意事项
    • 三、使用实例
    • 四、最后

一、需求和目的

在一个界面上实现多窗口除了之前所说的MDI这种形式,还有比较常用的就是使用tabwidget,然后有一个选项卡栏(QTabBar)来切换不同的窗口,比如这样的界面:
在这里插入图片描述

还有360管家界面,这样的:

在这里插入图片描述

还有这样的:
在这里插入图片描述

这样的话,在一个窗口中包含了很多窗口,切换方式一目了然,展现给用户的层级就会少一些,使用起来更加快捷,就不会使用起来像“套娃”一样了(打开一个还有一个)。

二、了解QTabWIDget类及用法

仍然和了解其他类一样,先在助手中搜索QTabWidget:

在这里插入图片描述

1、详细描述

基本上,先见名知意大致了解一下其方法和属性的作用,然后我们直接去看详细描述:

QTabWidget类提供了一组选项卡式小部件。
选项卡小部件提供了一个选项卡栏(参见QTabBar)和一个“页面区域”,用于显示与每个选项卡相关的页面。默认情况下,选项卡栏显示在页面区域的上方,但是可以使用不同的配置(参见表)。每个选项卡都与不同的小部件(称为页面)相关联。在页面区域中只显示当前页面;其他页面都隐藏起来了。用户可以通过单击选项卡或按Alt+字母快捷键(如果有的话)来显示不同的页面。
使用QTabWidget的正常方法是:
创建一个QTabWidget。
为选项卡对话框中的每个页面创建一个QWidget,但不要为它们指定父小部件。
在页面小部件中插入子小部件,使用布局将它们定位为正常位置。
调用addTab()或insertTab()将页面小部件放到选项卡小部件中,为每个选项卡提供一个合适的标签,并提供一个可选的键盘快捷方式。
选项卡的位置由tabPosition定义,它们的形状由tabShape定义。
当用户选择一个页面时,会发出currentChanged()信号。
当前页面索引可用currentIndex()表示,这是带有currentWidget()的当前页面小部件。您可以使用widget()检索带有给定索引的页面小部件的指针,并且可以找到带有indexOf()的小部件的索引位置。使用setCurrentWidget()或setCurrentIndex()来显示特定的页面。
您可以使用setTabText()或setTabIcon()更改选项卡的文本和图标。可以使用removeTab()方法删除选项卡及其关联页面。
每个选项卡在任何给定时间都是启用或禁用的(参见setTabEnabled())。如果启用了选项卡,选项卡文本将正常绘制,用户可以选择该选项卡。如果选项卡被禁用,选项卡将以不同的方式绘制,用户无法选择该选项卡。注意,即使禁用了选项卡,页面仍然可以可见,例如,如果所有选项卡碰巧都禁用了。
选项卡小部件可以很好地分割复杂的对话框。另一种方法是使用QStackedWidget,您可以为它提供一些在页面之间导航的方法,例如QToolBar或QListWidget。
QTabWidget中的大部分功能是由QTabBar(顶部提供选项卡)和QStackedWidget(大部分区域,组织各个页面)提供的。
一个Windows Vista样式标签小部件:

在这里插入图片描述

一个mac风格的标签小部件:

在这里插入图片描述

一个Fusion style标签小部件:

在这里插入图片描述

参见QTabBar、QStackedWidget、QToolBox和Tab Dialog示例。

里面除了介绍QTabWidget的用法外,我们发现除了使用QTabWidget还可以使用QToolBox(或者QListWidget)和QStackedWidget结合的方式实现分割复杂的对话框,至于QToolBox、QStackedWidget、QTabBar这些类这里就不展开来说了,感兴趣的单独去查看一下。

2、注意事项

在上面的描述中提到:
使用QTabWidget的正常方法是:
创建一个QTabWidget。
为选项卡对话框中的每个页面创建一个QWidget,但不要为它们指定父小部件。
在页面小部件中插入子小部件,使用布局将它们定位为正常位置。
调用addTab()或insertTab()将页面小部件放到选项卡小部件中,为每个选项卡提供一个合适的标签,并提供一个可选的键盘快捷方式。

可以使用removeTab()方法删除选项卡及其关联页面。

这里要说的注意就是removeTab(),调用它并不会删除和释放你在最初创建的QWidget,仅仅是在WTabWidget中移除了该QWidget,当你需要再让该widget在TabWidget中显示时add或者insert即可。

这在removeTab中也说明了:

在这里插入图片描述

三、使用实例

助手上提供了一个TabWidget的示例,此外,还有一个Tab Dialog Example:

在这里插入图片描述

TabWidget的例子是qml写的(又是一个新方向了,这里就不展开了),我们看一下Tab DIalog这个例子:

在这里插入图片描述

三个page,组成的tabwidget,底下一个buttonBox,两个控件在dialog里面垂直布局,再就是各个page的功能实现以及构造函数中buttonBox的信号和槽的关联等,例子很容易看懂,这里就不多说了,基本上QTabWidget就是:创建QTabWidget—创建QWidget—添加QWidget—QWidget添加控件及布局—移除QWidget—需要时再添加回来QWidget。

四、最后

例子中我们可以发现其在添加了自己创建的QWidget后并没有在最后释放,这不是错误,而是由Qt的内存管理机制决定的:QT的父子对象机制是在 QWidget和QOject中实现的。当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。 这种父子对象机制会在很大程度上简化我们的内存管理工作,减少内存泄露的风险。我们需要显式删除(就是用DELETE删除)的对象是那些使用NEW创建的并且没有父对象的对象(切记是new的才要delete,通过成员函数获得的对象,没有特殊说明的,千万不要随便delete.)。如果我们在删除一个对象的父对象之前删除它,QT会自动地从它的父对象的子对象列表中移除它的。

所以,由于其page的widget是继承自QWidget的,所以QWidget最后删除了其page的widget,所以在其程序代码中并未进行delete,因此基本上我们使用Qt自带的控件的话一般都不需要自己delete,当然你有强迫症的话自己delete并指针指空也肯定不会错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt关于tabwidget的使用及注意事项 的相关文章

  • ros使用自定义消息时,编译不成功,在Cmake中报错.

    在使用自定义消息时 xff0c 按照教程添加依赖和cmakelist文件后 xff0c 保证几条Cmake语句顺序无误的情况下 xff0c 考虑msg文件夹的位置 xff0c 应在功能包的第一级目录中
  • C语言加强--韦老师公开课

    目录 1 变量与指针 摘要 xff1a 普通变量 指针变量所占的内存空间大小 xff0c 变量在内存中的分配方式 xff08 首地址要求 长度 分配长度与实际使用长度区别 需要填充字节数 全局与局部变量在内存中的位置 xff09 xff1b
  • 大小端转换(一篇文章了解所有情况下的大小端转换方法)

    总述 xff1a 字节间字节内大端低地址的数据放在高字节位域 xff1a 先从低地址对应数据字节的高bit开始分配小端低地址的数据放在低字节位域 xff1a 先从低地址对应数据字节的低bit开始分配 注释 xff1a 对于大小端的几个结论
  • C语言程序内存四区——栈区,堆区,全局区,代码区

    1 全局区 xff1a 全局区比较特殊 xff0c 里面还分成了全局变量区 xff0c 静态变量区 xff0c 常量区 全局变量区用来存放全局变量 xff0c 静态变量区用来存放带有static修饰的变量 xff08 包括静态局部变量和静态
  • Linux 用户和组

    用户和组 前言一 查看用户二 基本操作1 添加用户2 查看3 修改密码4 切换用户5 其他6 登出 前言 一个用户可以属于多个组 xff0c 并且拥有这些组的权限 一 查看用户 输入命令 cat span class token opera

随机推荐

  • pip 清华镜像

    pip 清华镜像 一 地址二 使用 一 地址 https pypi tuna tsinghua edu cn simple 二 使用
  • requests库将cookieJar对象转换为cookies字典

    requests库将cookieJar对象转换为cookies字典 转字典转cookieJar 使用requests获取的resposne对象 xff0c 具有cookies属性 该属性值是一个cookieJar类型 转字典 cookies
  • mybatis-generator-core插件无法下载解决办法

    mybatis generator core插件无法下载解决办法 前言一 解决办法二 插件可用 前言 maven mybatis generator core插件无法下载 一 解决办法 二 插件可用
  • idea 去绿色波浪线

    idea 去绿色波浪线 如图 如图
  • stop-writes-on-bgsave-error

    redis RDB持久化配置 RDB持久化 配置 stop writes on bgsave error 选项 如果 61 yes xff1a redis 会创建一个新的后台进程dump rdb 假设 xff1a 创建快照 xff08 硬盘
  • px4_simple_example和uorb机制

    px4 simple app PX4 Autopilot src exampes px4 simple app xff0c 这个程序是用c语言调用orb API和poll机制订阅和发布通讯数据 xff0c 但是这个例子并不是既有接收又有发送
  • 四旋翼无人机硬件基础

    四旋翼无人机硬件基础 材料分析无刷电机型号转速 电子调速器作用规格四轴专用电调 xff1f 电调编程 xff1f 螺旋桨机制 规格 飞行控制器原理作用四轴 字四轴十字 电池锂电池 xff1f 电池容量电池片数放电能力插头类型T插XT60JS
  • AndroidStudio NDK开发环境配置及示例

    AndroidStudio NDK开发环境配置及示例 版本说明 版本作者日期备注0 1loon2020 8 26初稿 目录 文章目录 AndroidStudio NDK开发环境配置及示例版本说明目录一 Android Studio NDK环
  • Onvif协议学习:10、获取音视频流

    Onvif协议学习 xff1a 10 获取音视频流 文章目录 Onvif协议学习 xff1a 10 获取音视频流1 原理简介2 编码流程3 VLC播放RTSP视频4 准备FFmpeg库5 示例代码 原文链接 xff1a https blog
  • (ROS)RLException: [display_mrobot_with_camera.launch] is neither a launch file等一系列错误解决办法

    前提 xff1a 运行 roslaunch mrobot description display mrobot chassis urdf launch 有误 错误1 xff1a rviz直接打不开 错误显示 xff1a RLExceptio
  • 9款好用的SSH客户端软件推荐

    9款好用的SSH客户端软件推荐 文章目录 9款好用的SSH客户端软件推荐MobaXtermXshellTermiusPuTTYSimpleRemoteZOC TerminalFinalshellJuiceSSHServerCat SSH客户
  • 几款数据库连接工具

    几款数据库连接工具 文章目录 几款数据库连接工具1 前言2 Navicat3 DBeaver4 DataGrip5 phpMyAdmin 1 前言 我目前使用sqlite3和mysql数据库比较多 xff0c 所以对数据库客户端的需求主要是
  • win10文件资源管理器右键卡死现象解决方案大全

    win10文件资源管理器右键卡死现象解决方案大全 文章目录 win10文件资源管理器右键卡死现象解决方案大全一 右键桌面卡死 xff0c 过了许久都未反应二 右键文件夹或文件卡死2 1 方案12 2 方案22 3 方案3 xff08 靠谱
  • CLion常用插件及c文件模板配置

    CLion常用插件及c文件模板配置 文章目录 CLion常用插件及c文件模板配置1 常用插件2 模板2 1 c源文件模板 xff1a xff08 使用文件模板 xff09 2 2 c头文件模板 xff1a xff08 使用文件模板 xff0
  • Windows下安装及卸载程序可用的添加和删除当前路径到环境变量的bat脚本以及如何和inno setup结合使用的实例

    文章目录 1 安装bat脚本 install bat 将当前路径添加到环境变量中 2 卸载bat脚本 uninstall bat 搜索当前路径并删除 3 inno setup添加安装和卸载时执行上述bat脚本4 安装到 C盘权限不足问题处理
  • 浏览器播放rtsp视频流:4、jsmpeg+go实现局域网下的rtsp视频流web端播放

    文章目录 1 前言2 资料准备3 兼容性及适用性说明4 jsmpeg架构5 基于以上架构的go方案可行性分析6 编译和结果展示 xff08 编译坑点 xff09 7 最后 1 前言 之前的rtsp转webrtc的方案存在如下缺陷 xff1a
  • TCP套接字编程实例(一)

    TCP套接字编程实例 xff08 一 xff09 TCP套接字编程第一部分我们先用单线程简单实现客户端的 发 和服务器的 收 话不多说 xff0c 直接上代码 1 Client部分 xff1a include include include
  • Vm虚拟机扩展Ubuntu系统磁盘空间

    Vm虚拟机扩展Ubuntu系统磁盘空间 前言 一般我们在安装虚拟机时都会选择默认的20G磁盘空间 xff0c 但是一旦需要搭建一两个交叉编译环境后 xff0c 20G的空间就无法满足了 xff0c 我就是出现了这样的情况 xff0c 所以也
  • Qt添加菜单栏和工具栏

    Qt添加菜单栏和工具栏 版本说明 版本作者时间备注0 1loon2018 10 24初稿 目录 文章目录 Qt添加菜单栏和工具栏版本说明目录一 需求与目的二 详细说明三 最后 一 需求与目的 一般常规的PC软件都会有主窗口 xff0c 主窗
  • Qt关于tabwidget的使用及注意事项

    Qt关于tabwidget的使用及注意事项 版本说明 版本作者日期备注0 1loon2018 11 12初稿 目录 文章目录 Qt关于tabwidget的使用及注意事项版本说明目录一 需求和目的二 了解QTabWIDget类及用法1 详细描