我们都知道QStackedLayout类可以对一组子窗口部件进行摆放,或者对它们进行分页,但是一次只能显示其中一个,而把其他的子窗口部件或者分页都隐藏起来。QStackedLayout本身并不可见,并且对于用户改变分页也没有提供其他特有的方法。
![图一](https://img-blog.csdn.net/20151104142408795)
![图二](https://img-blog.csdn.net/20151104142443112)
![图三](https://img-blog.csdn.net/20151104142500350)
通过以上三个图我们可以看到分组效果,如果用手动敲打代码,主要代码如下:
listWidget = new QListWidget;
listWidget->addItem(tr("1"));
listWidget->addItem(tr("2"));
listWidget->addItem(tr("3"));
listWidget->addItem(tr("4"));
stackedLayout = new QStackedLayout;
stackedLayout->addWidget(1Page);
stackedLayout->addWidget(2Page);
stackedLayout->addWidget(3Page);
stackedLayout->addWidget(4Page);
connect(listWidget, SIGNAL(currentRowChanged(int)),
stackedLayout, SLOT(setCurrentIndex(int)));
这个是通过手动敲打代码来实现功能的,但有时后我们在设计程序界面的时候,我们更多的是用到Qt设计师。当中用到的是QStackedWidget类,这个类提供了一个带内置的QStackLayout的QWidget。
具体实现如下:
```
connect(ui->listWidget, SIGNAL(currentRowChanged(int)),ui->stackedWidget, SLOT(setCurrentIndex(int)));
接下来我将用点击按钮的形式来切换页面。看完整代码:
**Widget.h文件**
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QStackedWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
QStackedWidget *stack;
QLabel *label1,*label2,*label3;
QPushButton *Btn1,*Btn2,*Btn3;
public slots:
void BtnSlot();
};
#endif // WIDGET_H
**widget.cpp代码:**
#include "widget.h"
Widget::Widget(QWidget *parent) : QWidget(parent)
{
resize(400,130);
stack = new QStackedWidget(this);
label1 = new QLabel(stack);
label2 = new QLabel(stack);
label3 = new QLabel(stack);
label1 -> setText("test5");
label2 -> setText("test7");
label3 -> setText("test9");
stack -> addWidget(label1);
stack -> addWidget(label2);
stack -> addWidget(label3);
Btn1 = new QPushButton(this);
Btn2 = new QPushButton(this);
Btn3 = new QPushButton(this);
Btn1 -> setText("test1");
Btn2 -> setText("test2");
Btn3 -> setText("test3");
connect(Btn1,SIGNAL(clicked()),this,SLOT(BtnSlot()));
connect(Btn2,SIGNAL(clicked()),this,SLOT(BtnSlot()));
connect(Btn3,SIGNAL(clicked()),this,SLOT(BtnSlot()));
Btn1 -> setGeometry(10,10,100,25);
Btn2 -> setGeometry(10,50,100,25);
Btn3 -> setGeometry(10,90,100,25);
stack -> setGeometry(210,10,180,110);
}
Widget::~Widget()
{
}
void Widget :: BtnSlot()
{
QPushButton *BtnObj=qobject_cast<QPushButton*>(sender());
if(BtnObj==0)return;
if(BtnObj->text() == "test1")
stack -> setCurrentIndex(0);
else if(BtnObj->text() == "test2")
stack -> setCurrentIndex(1);
else
stack -> setCurrentIndex(2);
}
第一次写博客,希望这能对你有些帮助!