Qt中QLayout的用法(QGridLayout, QFormLayout, QStackedLayout)

Qt的布局类继承关系

在这里插入图片描述

在此仅简单介绍3种不常用的layout

QStackedLayout, QFormLayout , QGridLayout

在这里插入图片描述

实现代码

myLayouts.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_myLayouts.h"

class myLayouts : public QWidget
{
    Q_OBJECT

public:
    myLayouts(QWidget *parent = Q_NULLPTR);

private:
    Ui::myLayoutsClass ui;

    void initMyStackedLayout();
    void initMyFormLayout();
    void initMyGridLayout();

};

myLayouts.cpp

#include "myLayouts.h"
#include <QStackedLayout>
#include <QFormLayout>
#include <QBoxLayout>
#include <QGridLayout>

#include <QLabel>
#include <qlineedit.h>
#include <qspinbox.h>

myLayouts::myLayouts(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    initMyStackedLayout();
    initMyFormLayout();
    initMyGridLayout();
}
void myLayouts::initMyStackedLayout()
{
    QWidget* wgt1, * wgt2, * wgt3;
    wgt1 = new QWidget();
    wgt2 = new QWidget();
    wgt3 = new QWidget();
    wgt1->setStyleSheet("background:rgb(128,0,0)");
    wgt2->setStyleSheet("background:rgb(0,128,0)");
    wgt3->setStyleSheet("background:rgb(0,0,128)");

    QLabel* lb1, * lb2, * lb3;
    lb1 = new QLabel("Label1", wgt1);
    lb2 = new QLabel("Label2", wgt2);
    lb3 = new QLabel("Label3", wgt3);

    lb1->setStyleSheet("background:rgb(220,220,220)");
    lb2->setStyleSheet("background:rgb(170,170,170)");
    lb3->setStyleSheet("background:rgb(100,100,100)");

    QStackedLayout* slay = new QStackedLayout(ui.widget);
    slay->addWidget(wgt1);
    slay->addWidget(wgt2);
    slay->addWidget(wgt3);
    slay->setStackingMode(QStackedLayout::StackAll);
    QHBoxLayout* hlay = new QHBoxLayout;
    hlay->addLayout(slay);
    ui.widget->setLayout(hlay);

    ui.comboBox->addItem(tr("page1"));
    ui.comboBox->addItem(tr("page2"));
    ui.comboBox->addItem(tr("page3"));

    connect(ui.comboBox, SIGNAL(activated(int)), slay, SLOT(setCurrentIndex(int)));
}
void myLayouts::initMyFormLayout()
{
    QLineEdit* nameLineEdit1, * emailLineEdit1,*addrLineEdit1;
    nameLineEdit1 = new QLineEdit;
    emailLineEdit1 = new QLineEdit;
    addrLineEdit1 = new QLineEdit;

    QSpinBox* ageSpinBox1 = new QSpinBox;

    QFormLayout* formLayout = new QFormLayout;
    formLayout->addRow(tr("&Name1:"), nameLineEdit1);
    formLayout->addRow(tr("&Email1:"), emailLineEdit1);
    formLayout->addRow(tr("&Age1:"), ageSpinBox1);
    formLayout->addRow(tr("&Addr1:"), addrLineEdit1);

    ui.widget2->setLayout(formLayout);
}
void myLayouts::initMyGridLayout()
{

    QLineEdit* nameLineEdit, * emailLineEdit, * addrLineEdit;
    nameLineEdit = new QLineEdit;
    emailLineEdit = new QLineEdit;
    addrLineEdit = new QLineEdit;

    QSpinBox* ageSpinBox = new QSpinBox;

    QLabel* nameLabel, * emailLabel, * ageLabel, * addrLabel;

    nameLabel = new QLabel(tr("&Name:"));
    nameLabel->setBuddy(nameLineEdit);

    emailLabel = new QLabel(tr("&Email:"));
    emailLabel->setBuddy(emailLineEdit);

    ageLabel = new QLabel(tr("&Age:"));
    ageLabel->setBuddy(ageSpinBox);

    addrLabel = new QLabel(tr("&Addr:"));
    addrLabel->setBuddy(addrLineEdit);

    QGridLayout* gridLayout = new QGridLayout;
    gridLayout->addWidget(nameLabel, 0, 0);
    gridLayout->addWidget(nameLineEdit, 0, 1);
    gridLayout->addWidget(emailLabel, 1, 0);
    gridLayout->addWidget(emailLineEdit, 1, 1);
    gridLayout->addWidget(ageLabel, 2, 0);
    gridLayout->addWidget(ageSpinBox, 2, 1);
    gridLayout->addWidget(addrLabel, 3, 0);
    gridLayout->addWidget(addrLineEdit, 3, 1);
    ui.widget3->setLayout(gridLayout);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在PyQt5,布局管理器是用于管理和排窗口的控件的类。下面我们详细介绍QHBoxLayout、QVBoxLayout、QGridLayout、QFormLayout和QStackedLayout类的具体用法和原理,以及它们的一些常用内置函数。 1. QHBoxLayout(水平布局): - 用法:将控件按照水平方向依次排。 - 内置函数: - addWidget(widget, stretch=0, alignment=Qt.Alignment):向布局添加控件,并指定控件的拉伸因子和对齐方式。 - addSpacing(space):在布局添加指定大小的空白间隔。 - addStretch(stretch=0):在布局添加指定大小的可伸缩空间。 - insertSpacing(index, space):在指定位置插入指定大小的空白间隔。 - insertStretch(index, stretch=0):在指定位置插入指定大小的可伸缩空间。 2. QVBoxLayout(垂直布局): - 用法:将控件按照垂直方向依次排。 - 内置函数与QHBoxLayout相似,只是排方向不同。 3. QGridLayout(网格布局): - 用法:将控件放置在一个网格,按照行和进行排。 - 内置函数: - addWidget(widget, row, column, rowspan=1, colspan=1, alignment=Qt.Alignment):向布局添加控件,并指定其在网格布局的位置、跨行的数量和对齐方式。 - addLayout(layout, row, column, rowspan=1, colspan=1, alignment=Qt.Alignment):向布局添加子布局,并指定其在网格布局的位置、跨行的数量和对齐方式。 - setRowStretch(row, stretch):设置指定行的可伸缩空间。 - setColumnStretch(column, stretch):设置指定的可伸缩空间。 4. QFormLayout(表单布局): - 用法:用于创建表单界面,将标签和输入控件组合在一起。 - 内置函数: - addRow(label, field):添加一行标签和输入控件。 - setAlignment(label, alignment):设置标签的对齐方式。 - setFormAlignment(alignment):设置表单布局所有标签的对齐方式。 5. QStackedLayout(堆叠布局): - 用法:用于在同一位置堆叠多个控件,只显示其一个。 - 内置函数: - addWidget(widget):向布局添加控件。 - insertWidget(index, widget):在指定位置插入控件。 - setCurrentIndex(index):设置当前显示的控件索引。 - currentWidget() -> QWidget:返回当前显示的控件。 这些布局管理器类的原理是通过计算和调整控件的位置和大小来实现自动适应窗口大小的布局效果。它们会根据不同的排方向、行数等参数,将控件摆放在正确的位置。通过设置拉伸因子、间隔、可伸缩空间等属性,可以调整控件的尺寸和位置关系。 总结起来,我们可以根据界面的布局需求选择合适的布局管理器,并使用其内置函数来添加和调整控件。这样可以方便地实现灵活且自适应的界面布局。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值