stackedWidget可以用来切换各个页面。
一、布局
1.主界面中拖入stackedWidget,并右边属性中插入页进行制作页面。设置三个按钮用于对应切换到子页面。以及返回按钮(toolbuton)用来返回
2.mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QStack>
#include<page1.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void init();
void on_nextPage_clicked();
void on_goback_clicked();
void gotoPage(QString page);
void on_btn1_clicked();
void on_btn2_clicked();
void on_btn3_clicked();
public:
page1 *page111 = nullptr;
private:
Ui::MainWindow *ui;
QStack<int> pageIndexStack; //切换页面时,用来此时的页面id
};
#endif // MAINWINDOW_H
3. mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
#include<QString>
#include<page1.h>
//导航栏
QString shouyeName = "xxx系统";
int shouyeIndex = 0;
QString page1Name = "xx功能1";
int page1Index = 1;
QString page2Name = "xx功能2";
int page2Index = 2;
QString page3Name = "xx功能3";
int page3Index = 3;
QString page4Name = "xx功能4";
int page4Index = 4;
QMap<QString,int> map;//用于页面id与导航栏文字配对
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
init();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::init(){
// 显示首页信息
/*法二:不从ui处添加页面,通过代码添加*/
page111 = new page1();
int index= ui->stackedWidget->count();//子页面数量
ui->stackedWidget->insertWidget(index,page111); //新插入子页面page1
ui->stackedWidget->setCurrentIndex(shouyeIndex);
ui->stackedWidget->update();//更新stackwidget 则可将page111嵌入其中
map.insert(shouyeName,shouyeIndex);
map.insert(page1Name,page1Index);
map.insert(page2Name,page2Index);
map.insert(page3Name,page3Index);
map.insert(page4Name,page4Index);
}
void MainWindow::on_nextPage_clicked()
{
int index= ui->stackedWidget->currentIndex();
if(index==4){
index=shouyeIndex;
}else{
index+=1;
}
QString biaoti = map.key(index);
ui->biaoti->setText(biaoti);
ui->daohangname->setText(biaoti);
ui->stackedWidget->setCurrentIndex(index);
}
void MainWindow::on_goback_clicked()
{
if(pageIndexStack.empty()) {
qDebug()<<"栈空啦!没有可返回页了!";
return;
}else{
// 显示原来的页面
auto index = pageIndexStack.pop();
ui->stackedWidget->setCurrentIndex(index);
}
}
void MainWindow::gotoPage(QString page)
{
// 保存原来的页面
auto tmp = ui->stackedWidget->currentIndex();
pageIndexStack.push(tmp);
// 显示最新的页面
auto index = map.value(page);
ui->stackedWidget->setCurrentIndex(index);
}
void MainWindow::on_btn1_clicked()
{
gotoPage("xx功能1");
}
void MainWindow::on_btn2_clicked()
{
gotoPage("xx功能2");
}
void MainWindow::on_btn3_clicked()
{
gotoPage("xx功能3");
}