《Qt5:同一个界面多窗口或者多页面切换(QStackedWidget)》

QStackedWidget可用于创建类似于QTabWidget提供的用户界面。之前要显示不同的内容,都是通过创建子窗口的方式来实现的,这种是属于弹窗式,而QStackedWidget可以实现同一界面切换不同的窗口,相当于把弹窗式的子窗口都绑定到了一个统一的区域,直接切换就可以显示不同子窗口的内容,但是每次只能显示一个子窗口,这个和弹窗不一样。

 

 《Qt5:同一个界面多窗口或者多页面切换(QStackedWidget)》_第1张图片

 

完整代码下载


百度网盘链接:https://pan.baidu.com/s/1DLOk1ucpAbY8X6Ncu8HYvQ 
提取码:kht9 

CSDN下载:https://download.csdn.net/download/mars_xiaolei/11060743

 

本示例创建步骤


1、打开Qt Creator,新建一个Qt Widgets Application项目,添加控件Stacked Widget和PushButton,然后再添加3个子窗口类,分别取名为Rng、Edg、Ig,每个子窗口各添加一个Label控件用于显示战队名字。

 《Qt5:同一个界面多窗口或者多页面切换(QStackedWidget)》_第2张图片

《Qt5:同一个界面多窗口或者多页面切换(QStackedWidget)》_第3张图片《Qt5:同一个界面多窗口或者多页面切换(QStackedWidget)》_第4张图片《Qt5:同一个界面多窗口或者多页面切换(QStackedWidget)》_第5张图片

2、UI设计完后,开始添加代码

mainwindow.h 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include "rng.h"
#include "edg.h"
#include "ig.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void ChooseWidgets();
private:
    Ui::MainWindow *ui;
    Rng *rngWidget;
    Edg *edgWidget;
    Ig *igWidget;
};

#endif // MAINWINDOW_H

mainwindow.cpp 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

int firstIndex=0;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //设置窗口名字
    setWindowTitle(tr("LPL战队切换系统"));

    Rng *rngWidget=new Rng(this);
    Edg *edgWidget=new Edg(this);
    Ig *igWidget=new Ig(this);

    //添加页面
    ui->stackedWidget->addWidget(rngWidget);
    ui->stackedWidget->addWidget(edgWidget);
    ui->stackedWidget->addWidget(igWidget);

    //显示页面作为主页
    ui->stackedWidget->setCurrentWidget(rngWidget);
    //获取当前页面的序号
    firstIndex=ui->stackedWidget->currentIndex();
    qDebug()<<"firstIndex:"<pushButton, SIGNAL(clicked()), this, SLOT(ChooseWidgets()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

//切换页面
void MainWindow::ChooseWidgets()
{
    //获取页面的数量
    int nCount = ui->stackedWidget->count();
    //获取当前页面的索引
    int nIndex = ui->stackedWidget->currentIndex();
    //获取下一个需要显示的页面索引
    nIndex++;

    //当需要显示的页面索引大于等于总页面时,切换至首页
    if (nIndex >= nCount)
    {
        nIndex = firstIndex;
    }

    //显示当前页面
    ui->stackedWidget->setCurrentIndex(nIndex);
}

 

注意事项


新添加的Stacked Widget控件是有两个空白页面可以切换的,页面的索引是从0开始的,也就是说两个空白页面占据了0和1,如果新添加了页面,那就是索引号从2开始。还要注意的是页面有两种切换方式,一种是索引号,另外一种是按窗口名称,窗口名称这种在切换的时候不太好用,会报错,最好还是使用索引号。

QStackedWidget::setCurrentWidget: widget 0x75ec1490 not contained in stack

 

你可能感兴趣的:(《QT学习笔记》)