前言:

因为业务原因,需要根据场景动态隐藏某个tab和显示某个tab,本着能不动手就不动手的原则我翻遍各大搜索引擎看到大部分人给出的解决方案的只是草草的说隐藏的时候remove,显示的时候再加回去,抱着白Piao的心态翻了3个小时由于半夜1点扛(Piao)不下去了,还是自己动手吧。

使用方式:

先给出示例,能对大家的胃口再白Piao寡人后面的代码。

ctrl+c,然后ctrl+v复制粘贴本文源代码,在QT设计师中将你自己得QTabWidget提升为本文中的TabWidgetPlus。什么?怎么提升为xxx?自己查。

使用示例:

//使用方式很简单,想隐藏或者显示哪个tab直接hideTab或者showTab,下标从0开始。
ui.tab->hideTab(0);//隐藏第一个tab
ui.tab->showTab(0);//再把第一个tab显示出来

控件源代码:

头文件:

#ifndef __GUI_TABWIDGETPLUS_H__
#define __GUI_TABWIDGETPLUS_H__#include <qtabwidget.h>
/**********************************************************************************Copyright(C),MountCloud.org*FileName: tabwidgetplus.h*Author:  MountCloud*Version:  1.0*Date:  2021-07-30*Description:  //简易的显示和隐藏tab。适用于非动态改变tab数量,如果需要动态改变tab数量需要自行根据业务调用reloadPlusTabs()。*             //reloadPlusTabs在设计上是私有的的,所以自行重写add或者insert方法来更新plusTabs,我只是满足我非动态更新tab数量的需求。
**********************************************************************************/
class TabWidgetPlusTab {
public:QString text;QIcon icon;QWidget* widget;bool status = true;
};
class TabWidgetPlus : public QTabWidget{Q_OBJECT
public:TabWidgetPlus(QWidget* parent = nullptr);~TabWidgetPlus();//隐藏tabvoid hideTab(int index);//显示tabvoid showTab(int index);
private://映射的tabsQList<TabWidgetPlusTab> plusTabs;//刷新映射列表void reloadPlusTabs();//返回真实的indexint getRealIndex(int index);
};#endif

CPP文件:

#include "tabwidgetplus.h"
#include <qtabbar.h>
TabWidgetPlus::TabWidgetPlus(QWidget* parent) : QTabWidget(parent) {}TabWidgetPlus::~TabWidgetPlus() {
}void TabWidgetPlus::showTab(int index) {if (this->plusTabs.size() == 0) {this->reloadPlusTabs();}if (index > this->plusTabs.size() - 1) {return;}if (!plusTabs[index].status) {//获取当前真正要处理的indexint realIndex = getRealIndex(index);if (realIndex == -1) {return;}//添加tabTabWidgetPlusTab tempPt = plusTabs[index];QString text = tempPt.text;QIcon icon = tempPt.icon;QWidget* tabWidget = tempPt.widget;insertTab(realIndex, tabWidget, icon, text);//设置映射的状态(&plusTabs[index])->status = true;}
}void TabWidgetPlus::hideTab(int index) {if (this->plusTabs.size() == 0) {this->reloadPlusTabs();}if (index > this->plusTabs.size() - 1) {return;}if (plusTabs[index].status) {//获取当前真正要处理的indexint realIndex = getRealIndex(index);if (realIndex == -1) {return;}//删掉tabthis->removeTab(realIndex);//设置映射的状态(&plusTabs[index])->status = false;}
}void TabWidgetPlus::reloadPlusTabs() {if(this->plusTabs.size()>0){this->plusTabs.clear();}int tabcount = this->count();if (tabcount>0) {for (int i = 0; i < tabcount; i++) {TabWidgetPlusTab tempPt;QWidget* tabWidget = this->widget(i);QString text =this->tabBar()->tabText(i);QIcon icon = this->tabBar()->tabIcon(i);tempPt.text = text;tempPt.icon = icon;tempPt.widget = tabWidget;tempPt.status = true;this->plusTabs.append(tempPt);}}
}int TabWidgetPlus::getRealIndex(int index) {if (this->plusTabs.size() == 0) {reloadPlusTabs();}if (index == 0) {return 0;}if (index > this->plusTabs.size() - 1) {return -1;}int realIndex = 0;for (int i = 0; i < index; i++) {TabWidgetPlusTab twpt = plusTabs[i];if (twpt.status) {realIndex = realIndex + 1;}}return realIndex;
}

注意:

复制粘贴爽了点个赞呗。

QT5 QTabWidget 隐藏Tab 或 显示Tab 正确的解决方案相关推荐

  1. 解决echart在tab中切换时显示不正确

    在VUE使用Element UI时,在el-tab-pane添加上lazy='true'属性即可 <el-tab-pane label="远程测试控制" name=" ...

  2. [css] 你用过css的tab-size属性吗?浏览器默认显示tab为几个空格?

    [css] 你用过css的tab-size属性吗?浏览器默认显示tab为几个空格? tab-size 属性规定制表符(tab)字符的空格长度.在 HTML 中,制表符(tab)字符通常显示为一个单一的 ...

  3. vim 显示tab键

    1.文件中有 TAB 键的时候,你是看不见的.要把它显示出来: :set list :set list 现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白  字符在 ...

  4. 【Little Demo】从简单的Tab标签到Tab图片切换

    Tab标签切换效果是比较流行的一种网站页面布局,视觉表现为美观大方,通过标签展示内容.目前在各大网站都有存在这种效果.例如:淘宝的黄金位置使用Tab标签切换效果,网易新闻等. 1.简单的 Tab 标签 ...

  5. 低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment

    在ActionBar中添加Tab是很有用的技巧.在support V7库的支持下,我们几乎可以用和之前一样的方式来添加Tab,对于Tab来说,我们可以和MenuItem一样,给他定义自己的视图.我这里 ...

  6. Flutter切换tab后保留tab状态

    Flutter切换tab后保留tab状态 概述 Flutter中为了节约内存不会保存widget的状态,widget都是临时变量.当我们使用TabBar,TabBarView是我们就会发现,切换tab ...

  7. tab效果——支持tab标题的宽度自适应

    自己做的tab效果,参考了jquery里tabs布,还不太完善,只是做了tab的基本效果 有时间了补充以下特点: 1.让current tab与其他tab等高 2.Ie浏览器下的圆角显示  1 < ...

  8. 三星Galaxy Tab S6与Tab S7的任何区别

    Samsung's Galaxy Tab S7 was recently announced at Samsung's Unpacked event which featured products l ...

  9. [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口

    原文:[WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 [WPF疑难] 模式窗口被隐藏后重新显示时变成了非模式窗口 周银辉 现象: 大家可以试试下面这个很有趣但会带来Defect的现象:当我 ...

最新文章

  1. 鸿蒙能够替代安卓吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪
  2. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现插件...
  3. gradle 配置java 项目maven 依赖
  4. 使用Visual Studio Code调试.net控制台应用程序的方法
  5. 色彩丰富的水彩纹理背景,配合排版和简单的设计元素,给任何设计带来乐趣。
  6. Android OpenGL ES 开发教程(16):Viewing和Modeling(MODELVIEW) 变换
  7. reporting server 数据头部每页显示
  8. leetcode(153)寻找旋转排序数组中的最小值
  9. 酉矩阵和次酉矩阵的定义
  10. win10打不开自带word文档怎么办
  11. Android生命周期
  12. 【Java】23 函数式编程
  13. java中char数据类型的使用
  14. 超微服务器主板启动无反应_我如何构建无服务器启动
  15. layui管理后台模板
  16. 业务入云是一条不归路
  17. STM32F767多通道ADC采集+DMA传输
  18. 如何切换不同的python环境
  19. ECharts3中的图表大小自适应
  20. MATLAB画聚类热图,使用ComplexHeatmap绘制热图

热门文章

  1. 杰里之AC695N/AC696N 蓝牙耳机PCB LAYOUT 说明【篇4】
  2. 5、第六 - 面向对象高级语法-静态方法、类方法、属性方法
  3. CSS进阶篇--Normalize.css的使用(重置表)
  4. Anaconda 镜像源操作(添加、查看、删除)
  5. 私有化部署GPT,告别网络困扰
  6. 中兴V987自制ROM官方精简版
  7. 级联样式表_级联样式表| 第1部分
  8. Eclipse的单步调试
  9. 开始使用 Adobe Photoshop
  10. 2017 年 8 月:15 个有趣的 JS 和 CSS 库