QTabWidget分页显示,QStackedWidget分列显示

本文介绍了如何在Qt环境中使用QTabWidget和QStackedWidget创建具有页面切换功能的用户界面。QTabWidget用于实现多标签选项卡,而QStackedWidget则提供了一个一次只显示一个页面的小部件堆栈。示例代码展示了如何创建和配置这些组件,以及如何响应用户的页面切换操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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  } 
 

程序编译运行的结果如下,点击列表视图的不同的项会切换到不同的页面上。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值