QTabWidget 继承QWidget,QTabWidget 类提供了一组选项卡(多页面)小部件。QTabWi
dget 主要是用来分页显示的,每一页一个界面,众多界面公用一块区域,节省了界面大小,很
方便的为用户显示更多的信息。类似浏览器的多标签页面。本例创建3 个页面,每个页面里有一
个Label 标签部件,点击每个页面的选项卡则会切换到不同的页面上。
头文件“mainwindow.h”具体代码如下。
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QTableWidget>
6 #include <QHBoxLayout>
7 #include <QLabel>
8
9 class MainWindow : public QMainWindow
10 {
11 Q_OBJECT
12
13 public:
14 MainWindow(QWidget *parent = nullptr);
15 ~MainWindow();
16
17 private:
18 /* 声明对象 */
19 QWidget *widget;
20 QTabWidget *tabWidget;
21 QHBoxLayout *hBoxLayout;
22 QLabel *label[3];
23 };
24 #endif // MAINWINDOW_H
源文件“mainwindow.cpp”具体代码如下。
#include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 this->setGeometry(0, 0, 800, 480);
7
8 widget = new QWidget(this);
9 /* 居中 */
10 this->setCentralWidget(widget);
11
12 /* 多页面小部件 */
13 tabWidget = new QTabWidget();
14
15 /* 水平布局实例化 */
16 hBoxLayout = new QHBoxLayout();
17 QList <QString>strLabelList;
18 strLabelList<<"标签一"<<"标签二"<<"标签三";
19
20 QList <QString>strTabList;
21 strTabList<<"页面一"<<"页面二"<<"页面三";
22
23 QList <QString>iconList;
24 iconList<<":/icons/icon1"
25 <<":/icons/icon2"
26 <<":/icons/icon3";
27
28 for (int i = 0; i < 3; i++) {
29 label[i] = new QLabel();
30 /* 设置标签文本 */
31 label[i]->setText(strLabelList[i]);
32 /* 标签对齐方式(居中) */
33 label[i]->setAlignment(Qt::AlignCenter);
34 /* 添加页面 */
35 tabWidget->addTab(label[i],
36 QIcon(iconList[i]),
37 strTabList[i]
38 );
39 }
40 /* 是否添加关闭按钮 */
41 //tabWidget->setTabsClosable(true);
42 /* 将tabWidget 水平直排布 */
hBoxLayout->addWidget(tabWidget);
44 /* 将垂直布局设置到widget */
45 widget->setLayout(hBoxLayout);
46 }
47
48 MainWindow::~MainWindow()
49 {
50 }
源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
#include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
程序编译运行的结果如下,点击不同页面的选项卡则会切换到不同的页面上。
QStackedWidget 继承 QFrame。QStackedWidget 类提供了一个小部件堆栈,其中一次只能
看到一个小部件,与QQ 的设置面板类似。QStackedWidget 可用于创建类似于 QTabWidget 提供的用户界面。
头文件“mainwindow.h”具体代码如下。
#ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include <QMainWindow>
5 #include <QStackedWidget>
6 #include <QHBoxLayout>
7 #include <QListWidget>
8 #include <QLabel>
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 MainWindow(QWidget *parent = nullptr);
16 ~MainWindow();
17
18 private:
19 /* widget 小部件 */
20 QWidget *widget;
21 /* 水平布局 */
22 QHBoxLayout *hBoxLayout;
23 /* 列表视图 */
24 QListWidget *listWidget;
25 /* 堆栈窗口部件 */
26 QStackedWidget *stackedWidget;
27 /* 3 个标签 */
28 QLabel *label[3];
29
30 };
31 #endif // MAINWINDOW_H
源文件“mainwindow.cpp”具体代码如下。
#include "mainwindow.h"
2
3 MainWindow::MainWindow(QWidget *parent)
4 : QMainWindow(parent)
5 {
6 this->setGeometry(0, 0, 800, 480);
7
8 /* widget 小部件实例化 */
widget = new QWidget(this);
10
11 /* 设置居中 */
12 this->setCentralWidget(widget);
13
14 /* 垂直布局实例化 */
15 hBoxLayout = new QHBoxLayout();
16
17 /* 堆栈部件实例化 */
18 stackedWidget = new QStackedWidget();
19
20 /* 列表实例化 */
21 listWidget = new QListWidget();
22
23 QList <QString>strListWidgetList;
24 strListWidgetList<<"窗口一"<<"窗口二"<<"窗口三";
25
26 for (int i = 0; i < 3; i++){
27 /* listWidget 插入项 */
28 listWidget->insertItem(
29 i,
30 strListWidgetList[i]
31 );
32 }
33
34 QList <QString>strLabelList;
35 strLabelList<<"标签一"<<"标签二"<<"标签三";
36
37 for (int i = 0; i < 3; i++){
38 label[i] = new QLabel();
39 /* 设置标签文本 */
40 label[i]->setText(strLabelList[i]);
41 /* 标签对齐方式(居中) */
42 label[i]->setAlignment(Qt::AlignCenter);
43 /* 添加页面 */
44 stackedWidget->addWidget(label[i]);
45 }
46
47 /* 设置列表的最大宽度 */
48 listWidget->setMaximumWidth(200);
49 /* 添加到水平布局 */
50 hBoxLayout->addWidget(listWidget);
hBoxLayout->addWidget(stackedWidget);
52
53 /* 将widget 的布局设置成hboxLayout */
54 widget->setLayout(hBoxLayout);
55
56 /* 利用listWidget 的信号函数currentRowChanged()与
57 * 槽函数setCurrentIndex(),进行信号与槽连接
58 */
59 connect(listWidget, SIGNAL(currentRowChanged(int)),
60 stackedWidget, SLOT(setCurrentIndex(int)));
61 }
62
63 MainWindow::~MainWindow()
64 {
65 }
源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
#include "mainwindow.h"
2
3 #include <QApplication>
4
5 int main(int argc, char *argv[])
6 {
7 QApplication a(argc, argv);
8 MainWindow w;
9 w.show();
10 return a.exec();
11 }
程序编译运行的结果如下,点击列表视图的不同的项会切换到不同的页面上。