简述
Qt开发中经常遇到需要点按不同的按钮,然后在同一位置显示不同的内容。例如在下图中实现:按下页面1
上方显示这是页面一
。
利用QStackwidget实现
可以采用代码的方式,也可以采用Qt设计师的方式,本文采用Qt设计师进行实现。
在窗口拖入container
中的Stacked Widget
,默认是两个页面,需要多页面时可以右键->插入页。
代码:
//mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>class QStackedWidget;namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void switchPage();//切换函数private:Ui::MainWindow *ui;};#endif // MAINWINDOW_H
cpp文件:
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);connect(ui->aButton,&QPushButton::clicked,this,&MainWindow::switchPage);connect(ui->bButton,&QPushButton::clicked,this,&MainWindow::switchPage);connect(ui->cButton,&QPushButton::clicked,this,&MainWindow::switchPage);}MainWindow::~MainWindow(){delete ui;}void MainWindow::switchPage(){QPushButton *button = qobject_cast<QPushButton*>(sender());//得到按下的按钮的指针if(button==ui->aButton)ui->stack->setCurrentIndex(1);//根据按下的button按索引显示相应的页面else if(button==ui->bButton)ui->stack->setCurrentIndex(2);else if(button==ui->cButton)ui->stack->setCurrentIndex(3);}