Qt之QStackedWidget

官网链接:QStackedWidget

详细描述:

QStackedWidget类提供了一个部件(widget)的栈,且在某一时刻仅有一个部件是可见的。

QStackedWidget可以被用来创建一个用户界面,该用户界面和QTabWidget提供的相似。它是在QStackedLayout类之上构建的一个便利布局部件,像QStackedLayout一样,可以构建QStackedWidget并填充许多子部件(“页面”)。

QWidget *firstPageWidget = new QWidget;
QWidget *secondPageWidget = new QWidget;
QWidget *thirdPageWidget = new QWidget;

QStackedWidget *stackedWidget = new QStackedWidget;
stackedWidget->addWidget(firstPageWidget);
stackedWidget->addWidget(secondPageWidget);
stackedWidget->addWidget(thirdPageWidget);

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget);
setLayout(layout);

QStackedWidget没有为用户提供切换页面的固有方式。这通常是通过QComboBox或QListWidget完成的,这些小部件存储了QStackedWidget页面的标题。例如

  QComboBox *pageComboBox = new QComboBox;
  pageComboBox->addItem(tr("Page 1"));
  pageComboBox->addItem(tr("Page 2"));
  pageComboBox->addItem(tr("Page 3"));
  connect(pageComboBox,SIGNAL(activated(int)),stackedWidget,SLOT(setCurrentIndex(int)));

当使用QStackedWidget,部件被填入内部列表,函数indexOf()返回列表中部件的索引。部件也可以通过函数addWidget()函数添加到列表的末尾,或者通过函数insertWidget()将部件插在给定的索引处,函数removeWidget()用去移除QStackedWidget的部件。部件的数量可通过count()函数获得。函数widget()返回给定索引位置对应的部件,显示在屏上的部件的索引由函数currentIndex()给出,并可通过函数setCurrentIndex()更改。类似的,可以通过currentWidget()和setCurrentWidget()函数得到显示在屏上的部件和更改部件。

只要当前部件被更改或部件被移除,发射对应的信号currentChanged()或widgetRemoved()。

代码示例:

创建一个项目,选择基类QDialog,设类名是:StackDlg
StackDlg.h

#ifndef STACKDLG_H
#define STACKDLG_H

#include <QDialog>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
class StackDlg : public QDialog
{
    Q_OBJECT
public:
    explicit StackDlg(QWidget *parent = 0);
    ~StackDlg();
private:
    QListWidget *list;  //列表框
    QStackedWidget *stack;  //堆栈窗体
    QLabel *label1;   //文本窗体
    QLabel *label2;
    QLabel *label3;
};
#endif // STACKDLG_H

StackDlg.cpp

#include "stackdlg.h"
#include <QHBoxLayout>
StackDlg::StackDlg(QWidget *parent)
  : QDialog(parent)
{
    setWindowTitle(tr("Stackedwidget"));//QWidget的函数
    list = new QListWidget(this);
    list->insertItem(0,tr("NO.1"));
    list->insertItem(1,tr("NO.2"));
    list->insertItem(2,tr("NO.3"));
    label1 = new QLabel(tr("测试1"));
    label2 = new QLabel(tr("测试2"));
    label3 = new QLabel(tr("测试3"));

    stack = new QStackedWidget(this);
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);

    QHBoxLayout *mainLayout= new HBoxLayout(this);
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);//
    //设定为可伸缩的控件,第一个参数是用于指定设置的控件,第二个大于0表示这个控件可伸缩,且list和stack的窗口显示比例是1:2
    mainLayout->setStretchFactor(list,1);  
    mainLayout->setStretchFactor(stack, 2);
    connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
}
StackDlg::~StackDlg()
{}

main.cpp

#include "stackdlg.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    StackDlg w;
    w.show();
    return a.exec();
}

实现界面如下:
这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值