QT中QTabWidget在Qt 5.15 引入了 setTabVisible方法
低版本实现方法
1 //TabWidget
2 class TabWidget : public QTabWidget
3 {
4 Q_OBJECT
5
6 public:
7
8 class widgetTab {
9 public:
10 QString text;
11 QWidget* widget;
12 bool visable;
13 };
14
15 TabWidget(QWidget* parent = 0);
16 ~TabWidget();
17
18 bool showTab(int index);
19 bool hideTab(int index);
20
21 protected:
22 virtual void tabInserted(int index);
23
24 private:
25 QList<widgetTab> _tabpageWidgets;
26
27 };
1 //TabWidget
2 TabWidget::TabWidget(QWidget* parent)
3 :QTabWidget(parent)
4 {
5
6 }
7
8 TabWidget::~TabWidget()
9 {
10
11 }
12
13 void TabWidget::tabInserted(int index)
14 {
15 QWidget *curr = widget(index);
16
17 int realindex = -1;
18
19 for(int x = 0; x < _tabpageWidgets.size(); x++)
20 {
21 const widgetTab &tempTab = _tabpageWidgets.at(x);
22
23 if(tempTab.widget == curr)
24 {
25 realindex = x;
26 break;
27 }
28 }
29
30 if(realindex == -1)
31 {
32
33 widgetTab tempTab;
34 QString text =this->tabBar()->tabText(index);
35 QIcon icon = this->tabBar()->tabIcon(index);
36 tempTab.text = text;
37 tempTab.widget = curr;
38 tempTab.visable = true;
39 _tabpageWidgets.append(tempTab);
40 }
41 }
42
43
44 bool TabWidget::showTab(int index)
45 {
46
47 if(index >= 0 && index < _tabpageWidgets.size())
48 {
49 widgetTab &tempTab = _tabpageWidgets[index];
50
51 if(tempTab.visable == false)
52 {
53 this->insertTab(index, tempTab.widget, tempTab.text);
54 tempTab.visable = true;
55 return true;
56 }
57 }
58
59 return false;
60 }
61
62 bool TabWidget::hideTab(int index)
63 {
64 if(index >= 0 && index < _tabpageWidgets.size())
65 {
66 widgetTab &tempTab = _tabpageWidgets[index];
67
68 int idx = indexOf(tempTab.widget);
69
70 if(idx >= 0)
71 {
72 this->removeTab(idx);
73 tempTab.visable = false;
74 return true;
75 }
76 }
77
78 return false;
79 }