QStackedWidget类
堆栈窗体类在应用程序中经常用到,经常和队列框QListWidget以及下拉列表QComboBox配合使用。
效果如下
源码.h文件
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QStackedWidget>
#include <QListWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QStackedWidget* stack;
QListWidget* list;
QLabel* label1;
QLabel* label2;
QLabel* label3;
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
源码cpp文件
#include "dialog.h"
#include "ui_dialog.h"
#include <QHBoxLayout>
#include <QLineEdit>
#include <QPushButton>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
setWindowTitle(tr("stackWidget"));
list = new QListWidget(this);
list->resize(this->width()/4,this->height());
list->insertItem(0,tr("windows1"));
list->insertItem(1,tr("windows2"));
list->insertItem(2,tr("windows3"));
list->insertItem(4,tr("设置"));
label1 = new QLabel(tr("frist windows"));
label2 = new QLabel(tr("第二个 windows"));
label3 = new QLabel(tr("第三个 windows"));
QLineEdit* edit = new QLineEdit();
edit->setText("1222222222222222222222222");
QPushButton* btn = new QPushButton(tr("按下我"));
QWidget* widget = new QWidget;
QHBoxLayout* yout = new QHBoxLayout();
yout->addWidget(edit);
yout->addWidget(btn);
widget->setLayout(yout);
stack = new QStackedWidget(this);
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
stack->addWidget(widget);
QHBoxLayout* mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(5);
mainLayout->setSpacing(5);
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignHCenter);
mainLayout->setStretchFactor(list,1);
mainLayout->setStretchFactor(stack,4);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
//connect(list,&QListWidgetItem::currentRowChanged(int),stack,&QStackedWidget::setCurrentIndex(int));
}
Dialog::~Dialog()
{
delete ui;
}
页面添加与删除
stackedWidget->addWidget(groupBox_0);//添加
stackedWidget->insertWidget(1, groupBox_0);//插入
stackedWidget->removeWidget(groupBox_0);//删除
控件索引
int index = stackedWidget->currentIndex();
页面数量
int count = new stackedWidget->count();
槽函数
setCurrentIndex(int index) //设定特定索引页面当前可见
setCurrentWidget(QWidget *widget) //设定特定页面当前可见
信号
currentChanged(int index) //当前页面改变时触发,改变后的页面索引作为参数传递
widgetRemoved(int index) //当页面被移除时触发,被移除页面的索引作为参数传递。