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

news/2024/4/30 19:32:16

往期回顾:

【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或者圆形RoundedpTabW->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上用uiForm *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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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上用uiForm *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类的并创建对象放进去,大家如果要运行代码,也需要自己建一个,要不然就直接删除这部分代码。 


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

AR-Net网络(图像篡改检测)

AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征&#xff0c;使网络能够充分利用不同维度的被篡改特征&#xff0c;此外&#xff0c;AR-Net 改进了预测掩模&a…

【A-006】基于SSH的新闻发布系统(含论文)

【A-006】基于SSH的新闻发布系统&#xff08;含论文&#xff09; 开发环境&#xff1a; Jdk7(8)Tomcat7(8)MySQLIntelliJ IDEA(Eclipse) 数据库&#xff1a; MySQL 技术&#xff1a; SpringStruts2HiberanteJSPJquery 适用于&#xff1a; 课程设计&#xff0c;毕业设计&…

Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置

文章目录 前言相关地址环境配置初始化环境配置文件夹结构代码结构代码运行 资源文件导入像素风格窗口环境设置背景设置,Tileap使用自动TileMap 人物场景动画节点添加站立节点添加移动动画添加 通过依赖注入获取Godot的全局属性项目声明 当前项目逻辑讲解角色下降添加代码位置问…

外包干了5天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

git-怎样把连续的多个commit合并成一个?

Git怎样把连续的多个commit合并成一个&#xff1f; Git怎样把连续的多个commit合并成一个&#xff1f; 参考URL: https://www.jianshu.com/p/5b4054b5b29e 查看git日志 git log --graph比如下图的commit 历史&#xff0c;想要把bai “Second change” 和 “Third change” 这…

每日一题--- 环形链表[力扣][Go]

环形链表 题目&#xff1a;142. 环形链表 II 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…