谈谈QT分组布局

我们都知道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);
}

第一次写博客,希望这能对你有些帮助!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值