QT入门之QStackWidget

QT入门学习之QStackWidget

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

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

代码结构:
QT入门之QStackWidget_第1张图片测试工程的结构
mystackwidget.h

#ifndef MYSTACKWIDGET_H
#define MYSTACKWIDGET_H

#include 
#include 
#include 
#include 
#include 
#include 

/*
 * 堆栈窗口,可以管理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 
#include 
#include 
#include 
#include 
#include "mystackwidget.h"
int main(int argc, char *argv[])
{
     
    QApplication a(argc, argv);
    MyStackWidget *mystackWidget=new MyStackWidget;
    return a.exec();
}

QT入门之QStackWidget_第2张图片QT入门之QStackWidget_第3张图片

你可能感兴趣的:(QT)