首先,这篇博文是根据大佬一去二三里的博文改编的,着重在于利用QStackedWidget实现多个按钮切换页面的效果。如图:
点击上方的三个按钮,在下方显示不同的内容。
先说说我的思路,
1、建立一个Qwidget,用来设置QGridLayout;
2、把我需要的QPushButton和QStackedWidget放在上一步的QGridLayout里面;
3、把QGridLayout放在第一步中Qwidget。
按钮之间的箭头用Qlabel 来设置。
实际上我的主窗口布局是
|-------------------------------------------------------------------------------------------|
|QPushButton Qlabel QPushButton Qlabel QPushButton|
| QStackedWidget |
|-------------------------------------------------------------------------------------------|
不多说,直接上代码:
首先是头文件mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGridLayout>
#include <QWidget>
#include <QPushButton>
#include <QStackedWidget>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
QWidget *pwind;
//上方三个按钮
QPushButton *btnT1;
QPushButton *btnT2;
QPushButton *btnT3;
//设置三个QStackedWidget 页面,每个页面包含一个按钮(当然这里面的按钮只是看看);
QStackedWidget *m_pStackedWidget;
QPushButton *btnT4;
QPushButton *btnT5;
QPushButton *btnT6;
public slots:
void switchPage(int nIndex);//切换设置
void sss1();//链接按钮的槽
void sss2();
void sss3();
};
#endif // MAINWINDOW_H
在这里,我新添加了三个声明(sss1,sss2,sss3),这三个声明分别对应三个按钮的效果。
mainwindow.cpp
#include "mainwindow.h"
#include <QLabel>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
pwind = new QWidget;
setCentralWidget(pwind);
QPushButton *btnT1= new QPushButton("btn1");
QPushButton *btnT2= new QPushButton("btn2");
QPushButton *btnT3= new QPushButton("btn3");
QLabel *pttt1= new QLabel("→",this);
QLabel *pttt2= new QLabel("→",this);
m_pStackedWidget = new QStackedWidget();
btnT4 = new QPushButton("子页面1");
btnT5 = new QPushButton("子页面2");
btnT6 = new QPushButton("子页面3");
m_pStackedWidget->addWidget(btnT4);
m_pStackedWidget->addWidget(btnT5);
m_pStackedWidget->addWidget(btnT6);
QGridLayout *pLayout = new QGridLayout();
pLayout->addWidget(btnT1,0,0);
pLayout->addWidget(pttt1,0,1);
pLayout->addWidget(btnT2,0,2);
pLayout->addWidget(pttt2,0,3);
pLayout->addWidget(btnT3,0,4);
pLayout->addWidget(m_pStackedWidget,1,0,2,5);
//addWidget(待添加QWidget,行数,列数,跨越行数,跨越列数);后面的参数可以缺省
pwind->setLayout(pLayout);
connect(btnT1, &QPushButton::clicked, this, &MainWindow::sss1);
connect(btnT2, &QPushButton::clicked, this, &MainWindow::sss2);
connect(btnT3, &QPushButton::clicked, this, &MainWindow::sss3);
//通过控制sss1、sss2、sss3的参数变化,来实现对switchPage(int nIndex)的控制
}
MainWindow::~MainWindow()
{
}
void MainWindow::sss1()//设定显示页面1
{
int i = 0;
switchPage(i);//将要显示的页面编号传递给switchPage(int nIndex);
}
void MainWindow::sss2()//设定显示页面2
{
int i = 1;
switchPage(i);
}
void MainWindow::sss3()//设定显示页面3
{
int i = 2;
switchPage(i);
}
void MainWindow::switchPage(int nIndex)
{
m_pStackedWidget->setCurrentIndex(nIndex);
}
然后是main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}