当前位置:   article > 正文

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

qt qtabwidget

往期回顾:

【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. 1.添加自定义tab
  2. int insertTab(int index, QWidget *widget, const QString &);
  3. int insertTab(int index, QWidget *widget, const QIcon& icon, const QString &label);

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

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

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

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

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

3、完整示例代码 

3.1 Widget.h
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. QT_BEGIN_NAMESPACE
  5. namespace Ui { class Widget; }
  6. QT_END_NAMESPACE
  7. class Widget : public QWidget
  8. {
  9. Q_OBJECT
  10. public:
  11. Widget(QWidget *parent = nullptr);
  12. ~Widget();
  13. private:
  14. Ui::Widget *ui;
  15. };
  16. #endif // WIDGET_H
3.2 Widget.cpp
  1. Widget::Widget(QWidget *parent)
  2. : QWidget(parent)
  3. , ui(new Ui::Widget)
  4. {
  5. ui->setupUi(this);
  6. QHBoxLayout * pHLay = new QHBoxLayout(this);
  7. QTabWidget * pTabW = new QTabWidget(this);
  8. //设置tab上的关闭图标
  9. pTabW->setTabsClosable(true);
  10. //设置tab形状
  11. pTabW->setTabShape(QTabWidget::Triangular);
  12. //还可以设置tab位置
  13. pTabW->setTabPosition(QTabWidget::North);
  14. //创建三个widget放进去
  15. QWidget * w1 =new QWidget;
  16. w1->setStyleSheet("background-color:rgb(122,122,122)");
  17. QWidget * w2 =new QWidget;
  18. w2->setStyleSheet("background-color:rgb(222,222,222)");
  19. QWidget * w3 =new QWidget;
  20. w3->setStyleSheet("background-color:rgb(22,22,22)");
  21. //int insertTab(int index, QWidget *widget, const QString &);
  22. //int insertTab(int index, QWidget *widget, const QIcon& icon, const QString &label);
  23. //除了放文字还可以放图标
  24. pTabW->insertTab(0,w1,"tab1");
  25. pTabW->insertTab(1,w2,"tab2");
  26. pTabW->insertTab(2,w3,"tab3");
  27. //自己再创建一个widget放进去,也就意味着我可以在widget上用ui
  28. Form *f = new Form;
  29. pTabW->insertTab(3,f,"tab4");
  30. //鼠标悬浮上去会显示信息
  31. pTabW->setTabToolTip(1,"this is tab01");
  32. pHLay->addWidget(pTabW);
  33. /*
  34. Q_SIGNALS:
  35. void currentChanged(int index);//页面改变信号
  36. void tabCloseRequested(int index);//关闭信号
  37. void tabBarClicked(int index);//点击信号
  38. void tabBarDoubleClicked(int index);//双击信号
  39. */
  40. //信号槽试试TabWidget的几个信号
  41. connect(pTabW,&QTabWidget::currentChanged,[=](int index){
  42. qDebug()<<"currentChanged index ="<<index;
  43. });
  44. connect(pTabW,&QTabWidget::tabCloseRequested,[=](int index){
  45. qDebug()<<"tabCloseRequested index ="<<index;
  46. pTabW->removeTab(index);
  47. });
  48. connect(pTabW,&QTabWidget::tabBarClicked,[=](int index){
  49. qDebug()<<"tabBarClicked index ="<<index;
  50. //pTabW->removeTab(index);
  51. });
  52. }

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


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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/962206
推荐阅读
相关标签
  

闽ICP备14008679号