QT入门学习之QStackWidget
- QStackedWidget提供了一个管理QWidget的容器,一次只能显示一个QWidget.
- 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();
}