首页 > 其他分享 >【QT入门】 QTabWidget各种常见用法详解

【QT入门】 QTabWidget各种常见用法详解

时间:2024-03-29 19:31:17浏览次数:12  
标签:index Widget QT int QWidget 详解 tab QTabWidget pTabW

往期回顾:

【QT入门】 Qt代码创建布局之分裂器布局详解-CSDN博客

【QT入门】 Qt代码创建布局之setLayout使用-CSDN博客

【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客

 【QT入门】 QTabWidget各种常见用法详解

一般来说,学一个新的控件,首先要看他是怎么构造的,其次看怎么用,常用的方法,然后要去看他的信号函数,特别是熟悉常用方法和信号。而且ui界面创建和手动代码创建都要学会。

一、UI界面创建

ui界面创建Tab Widget是很简单的,找到Tab Widget拖动到窗口上即可。

在里面可以实现增加页,删除页的基本功能,ui操作简单明了,还很容易实现。

二、手动代码创建 

我们重点看怎么用手动代码去创建

1、最终效果

可以看到我们建立了四个tab页面,并为每个tab页面设置了不同的样式,而且里面有一个页面还是用一个单独的类写的,这意味着我们可以对这个页面进行ui设计,然后直接创建类对象放进来即可。

2、常见用法

2.1.添加自定义tab
1.添加自定义tab
int insertTab(int index, QWidget *widget, const QString &);
int insertTab(int index, QWidget *widget, const QIcon& icon, const QString &label);

三个参数分别是:索引、添加的widget类、显示的文字,下面多的一个参数是图标 。

2.2.设置tab上的关闭图标
2、设置tab上的关闭图标
    pTabW->setTabsClosable(true);
2.3.设置tab形状
3、设置tab形状,梯形Triangular或者圆形Rounded
    pTabW->setTabShape(QTabWidget::Triangular);
2.4.设置tab位置
4、还可以设置tab位置,上北下南都可以
    pTabW->setTabPosition(QTabWidget::North);
2.5.鼠标悬浮显示信息
5、鼠标悬浮上去会显示信息
    pTabW->setTabToolTip(1,"this is tab01");
2.6.新建类添加tab
6、我们还可以新建一个Qt设计师界面类,这样我们就可以添加一个tab的同时,用ui来设计这个tab里的widget
    //自己再创建一个widget放进去,也就意味着我可以在widget上用ui
    Form *f = new Form;
    pTabW->insertTab(3,f,"tab4");
2.7.信号函数
7、信号函数:
Q_SIGNALS:
    void currentChanged(int index);//页面改变信号
    void tabCloseRequested(int index);//关闭信号
    void tabBarClicked(int index);//点击信号
    void tabBarDoubleClicked(int index);//双击信号

用关闭信号的前提是,在前面用pTabW->setTabsClosable(true);设置了关闭图标 

几个信号怎么用是都很简单的,注意其中很关键一个参数,index索引,这个是找到对应tab的标识

  connect(pTabW,&QTabWidget::currentChanged,[=](int index){
         qDebug()<<"currentChanged index ="<<index;
    });

3、完整示例代码 

3.1 Widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
3.2 Widget.cpp
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QHBoxLayout * pHLay = new QHBoxLayout(this);

    QTabWidget * pTabW = new QTabWidget(this);

    //设置tab上的关闭图标
    pTabW->setTabsClosable(true);

    //设置tab形状
    pTabW->setTabShape(QTabWidget::Triangular);

    //还可以设置tab位置
    pTabW->setTabPosition(QTabWidget::North);

    //创建三个widget放进去
    QWidget * w1 =new QWidget;
    w1->setStyleSheet("background-color:rgb(122,122,122)");

    QWidget * w2 =new QWidget;
    w2->setStyleSheet("background-color:rgb(222,222,222)");

    QWidget * w3 =new QWidget;
    w3->setStyleSheet("background-color:rgb(22,22,22)");

    //int insertTab(int index, QWidget *widget, const QString &);
    //int insertTab(int index, QWidget *widget, const QIcon& icon, const QString &label);
    //除了放文字还可以放图标
    pTabW->insertTab(0,w1,"tab1");
    pTabW->insertTab(1,w2,"tab2");
    pTabW->insertTab(2,w3,"tab3");

    //自己再创建一个widget放进去,也就意味着我可以在widget上用ui
    Form *f = new Form;
    pTabW->insertTab(3,f,"tab4");

    //鼠标悬浮上去会显示信息
    pTabW->setTabToolTip(1,"this is tab01");

    pHLay->addWidget(pTabW);

    /*
Q_SIGNALS:
    void currentChanged(int index);//页面改变信号
    void tabCloseRequested(int index);//关闭信号
    void tabBarClicked(int index);//点击信号
    void tabBarDoubleClicked(int index);//双击信号
    */

    //信号槽试试TabWidget的几个信号
    connect(pTabW,&QTabWidget::currentChanged,[=](int index){
         qDebug()<<"currentChanged index ="<<index;
    });

    connect(pTabW,&QTabWidget::tabCloseRequested,[=](int index){
         qDebug()<<"tabCloseRequested index ="<<index;
         pTabW->removeTab(index);
    });

    connect(pTabW,&QTabWidget::tabBarClicked,[=](int index){
         qDebug()<<"tabBarClicked index ="<<index;
         //pTabW->removeTab(index);
    });


}

需要注意的是我自己创建了一个Form类的并创建对象放进去,大家如果要运行代码,也需要自己建一个,要不然就直接删除这部分代码。 


都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

标签:index,Widget,QT,int,QWidget,详解,tab,QTabWidget,pTabW
From: https://blog.csdn.net/LF__plus/article/details/137102919

相关文章

  • C++继承详解
    文章目录前言一、继承的概念二、基类和派生类对象赋值转换三、继承中的作用域,隐藏四、菱形继承,菱形虚拟继承五、子类的默认成员函数六.继承和组合总结前言在本篇文章中我们将会学到有关继承方面的知识,其中C++中三大特性分别为:封装,继承多态。由此可见继承在学习中的......
  • 【Qt】常用控件(输入类)
    目录一、LineEdit二、TextEdit三、ComBo四、DateTimeEdit五、Slider一、LineEditQLineEdit用来表示单行输入框,可以输入一段文本,但是不能换行。属性说明test输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoMode显示方式,normal,Pa......
  • 五款常用在线JavaScript加密混淆工具详解:jscrambler、JShaman、jsfack、ipaguard和jje
    摘要本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具,包括jscrambler、JShaman、jsfack、freejsobfuscator和jjencode。通过对这些工具的功能及使用方法进行详细解析,帮助开发人员更好地保护和加密其JavaScript代码,提升网站的安全性和保密性。 引言在当今......
  • Java 的数组详解
    数组的定义数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标(编号、标记)来访问它,下标是从0开始的,如果是存10个数组,那么下标是从0~9的代码举例publ......
  • 万字详解PHP+Sphinx中文亿级数据全文检索实战(实测亿级数据0.1秒搜索耗时)
    Sphinx官方文档:http://sphinxsearch.com/docs/sphinx3.html极简概括:由C++编写的高性能全文搜索引擎的开源组件,C/S架构,跨平台(支持Linux、Windows、MacOS),支持分布式部署,并可直接适配MySQL。解决问题:因为MySQL的like%keyword%不走索引,且全文索引不支持中文,所以需要借助其它......
  • 详解DROO论文中的order-preserving quantization method(保序量化方法)
    ​一、论文概述1.原文GitHub链接DeepReinforcementLearningforOnlineComputationOffloadinginWirelessPoweredMobile-EdgeComputingNetworks2.原文大意提出了一种深度强化学习方法解决了边缘计算任务卸载决策和资源分配问题。整体分为两大部分:其中第一部......
  • android小球(二)——用户数据缓存详解SharedPreferences
    SharedPreferences概述SharedPreferences是Android平台上一个轻量级的存储辅助类,用来保存应用的一些常用配置,它提供了String,set,int,long,float,boolean六种数据类型。使用SharedPreferences进行存储的数据是存放在一个XML文件中的,同时它的存储方式是是以key-value的形式,key对应......
  • 【QT+QGIS跨平台编译】040:【geos_c+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
    点击查看专栏目录文章目录一、geos_c介绍二、文件下载三、文件分析四、pro文件五、编译实践一、geos_c介绍  GEOS_C(GEOSC++接口)是GEOS库的C语言版本,它提供了一套丰富的API,允许开发者在C++程序中执行复杂的几何形状处理和空间关系分析。GEOS_C是基于JTS(Jav......
  • 【详解】运算放大器工作原理及其在信号处理中的核心作用
    什么是运算放大器运算放大器(简称“运放”)是一种放大倍数非常高的电路单元。在实际电路中,它常常与反馈网络一起组成一定的功能模块。它是一种带有特殊耦合电路和反馈的放大器。输出信号可以是输入信号的加法、减法、微分和积分等数学运算的结果。由于早期用于模拟计算机中实现......
  • 最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解
    文章目录零、回顾1、流网络的割2、最小割问题一、最小割的应用1.1POJ1966--CableTVNetwork1.1.1原题链接1.1.2思路分析1.1.3AC代码1.2ZOJ2676NetworkWars1.2.1原题链接1.2.2思路分析1.2.3AC代码1.3OPTM-OptimalMarks1.3.1原题链接1.3.2思路分析1.3.3AC代码......