QT入门学习之QStackWidget

  1. QStackedWidget提供了一个管理QWidget的容器,一次只能显示一个QWidget.
  2. QStackedWidget没有为用户提供切换页面的内在手段。这通常通过QComboBox或QListWidget完成,QListWidget存储QStackedWidget页面的标题。

不过我直接用按钮点击来切换QWidget,通过QStackedWidget的setCurrentIndex(int id);来切换对应的窗口。

代码结构:
在这里插入图片描述测试工程的结构
mystackwidget.h

#ifndef MYSTACKWIDGET_H
#define MYSTACKWIDGET_H

#include <QStackedWidget>
#include <QStringLiteral>
#include <QPushButton>
#include <QWidget>
#include <QDebug>
#include <QLabel>

/*
 * 堆栈窗口,可以管理QWidget。
*/
class MyStackWidget:QStackedWidget
{
    Q_OBJECT
public:
    MyStackWidget();
protected:
private:
    QWidget *window1;
    QWidget *window2;
signals:
public slots:
    void switchPageSlot();
};

#endif // MYSTACKWIDGET_H

mystackwidget.cpp

#include "mystackwidget.h"

MyStackWidget::MyStackWidget()
{
    this->setWindowTitle(QStringLiteral("窗口管理"));
    this->resize(600,500);

    //创建窗口window1
    window1=new QWidget;
    window1->setStyleSheet("background-color:gray;");
    QLabel *label1=new QLabel(QStringLiteral("我是窗口1"),window1);
    label1->move(window1->width()/2,window1->height()/2);
    QPushButton *button1=new QPushButton(QStringLiteral("切换到窗口2"),window1);
    connect(button1,SIGNAL(clicked()),this,SLOT(switchPageSlot()));

    //创建窗口window2
    window2=new QWidget;
    window2->setStyleSheet("background-color:green;");
    QLabel *label2=new QLabel(QStringLiteral("我是窗口2"),window2);
    label2->move(window2->width()/2,window2->height()/2);
    QPushButton *button2=new QPushButton(QStringLiteral("切换到窗口1"),window2);
    connect(button2,SIGNAL(clicked()),this,SLOT(switchPageSlot()));
    this->addWidget(window1);
    this->addWidget(window2);
    
    qDebug()<<QStringLiteral("容器里的窗口个数=")<<this->count();
    this->setCurrentIndex(0);

    //显示当前页面
    this->show();
}

void MyStackWidget::switchPageSlot(){
    if(-1 == this->currentIndex())
    {
        qDebug()<<"没有窗口可以显示";
    }else{
        //两个窗口来回切换
        if(0 == this->currentIndex())
        {
            this->setCurrentIndex(1);
        }else{
            this->setCurrentIndex(0);
        }
    }
}

mainc.pp

#include <QApplication>
#include <QWidget>
#include <QStackedWidget>
#include <QPushButton>
#include <QDebug>
#include "mystackwidget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyStackWidget *mystackWidget=new MyStackWidget;
    return a.exec();
}

界面1界面2

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐