简述
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_OBJECT
public:
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);
}