qt QStackedWidget详解
1、概述
QStackedWidget是Qt框架中的一个控件,它提供了一个堆叠式的界面,允许在同一空间内切换显示多个页面(或称为层)。每个页面都可以包含不同的内容,如文本、图像、按钮或其他小部件。与QTabWidget不同,QStackedWidget本身不提供标签来切换页面,但你可以结合其他控件(如QToolBar、QComboBox或QTabBar)来实现页面切换功能。QStackedWidget非常适合用于创建具有多个视图或功能区域的应用程序,这些区域可以通过编程方式或用户交互来动态显示。
2、重要方法
QStackedWidget类提供了一系列方法来管理其堆叠的页面。以下是一些关键的方法:
- addWidget(QWidget *widget):向QStackedWidget中添加一个新页面,并将其添加到内部页面列表中。这个方法会自动为新页面分配一个索引。
- insertWidget(int index, QWidget *widget):在指定索引处插入一个新页面。如果索引超出了当前页面范围,页面将被添加到末尾。
- removeWidget(QWidget *widget):从QStackedWidget中移除指定的页面。页面本身不会被删除,只是从堆叠中移除。
- currentIndex():返回当前显示的页面的索引。
- setCurrentIndex(int index):设置当前显示的页面为指定索引的页面。
- currentWidget():返回当前显示的页面的QWidget指针。
- widget(int index):返回指定索引处的页面的QWidget指针。
- count():返回QStackedWidget中页面的总数。
3、重要信号
- currentChanged(int index):当当前显示页面的索引改变时发射
- widgetRemoved(int index):当某个页面被移除时发射,根据索引定位。
#include <QApplication>
#include <QMainWindow>
#include <QStackedWidget>
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // 设置窗口标题和大小 setWindowTitle("QStackedWidget Example"); resize(400, 300); // 创建一个QStackedWidget QStackedWidget *stackedWidget = new QStackedWidget(this); // 创建第一个页面并设置内容 QWidget *page1 = new QWidget(); QVBoxLayout *layout1 = new QVBoxLayout(page1); QLabel *label1 = new QLabel("This is the first page.", page1); layout1->addWidget(label1); // 创建第二个页面并设置内容 QWidget *page2 = new QWidget(); QVBoxLayout *layout2 = new QVBoxLayout(page2); QLabel *label2 = new QLabel("This is the second page.", page2); layout2->addWidget(label2); // 创建第三个页面并设置内容 QWidget *page3 = new QWidget(); QVBoxLayout *layout3 = new QVBoxLayout(page3); QLabel *label3 = new QLabel("This is the third page.", page3); layout3->addWidget(label3); // 向QStackedWidget中添加页面 stackedWidget->addWidget(page1); stackedWidget->addWidget(page2); stackedWidget->addWidget(page3); // 创建一个按钮栏来切换页面 QWidget *buttonBar = new QWidget(this); QHBoxLayout *buttonLayout = new QHBoxLayout(buttonBar); QPushButton *button1 = new QPushButton("Page 1", buttonBar); QPushButton *button2 = new QPushButton("Page 2", buttonBar); QPushButton *button3 = new QPushButton("Page 3", buttonBar); buttonLayout->addWidget(button1); buttonLayout->addWidget(button2); buttonLayout->addWidget(button3); // 连接按钮点击信号到槽函数来切换页面 connect(button1, &QPushButton::clicked, this, [stackedWidget]() { stackedWidget->setCurrentIndex(0); }); connect(button2, &QPushButton::clicked, this, [stackedWidget]() { stackedWidget->setCurrentIndex(1); }); connect(button3, &QPushButton::clicked, this, [stackedWidget]() { stackedWidget->setCurrentIndex(2); }); // 创建一个中心部件并设置布局 QWidget *centralWidget = new QWidget(this); QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); mainLayout->addWidget(buttonBar); mainLayout->addWidget(stackedWidget); // 将中心部件设置为主窗口的部件 setCentralWidget(centralWidget); }
}; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建并显示主窗口 MainWindow mainWindow; mainWindow.show(); // 进入应用程序的主事件循环 return app.exec();
}
觉得有帮助的话,打赏一下呗。。