Qt之QStackedWidget,向大佬学习的笔记

首先,这篇博文是根据大佬一去二三里的博文改编的,着重在于利用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();
}

 

  • 14
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自星星的死心眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值