Qt中QGridLayout使用方法

QGridLayout 类在网格中布置小部件。
QGridLayout 获取可用的空间(通过其父布局或 parentWidget()),将其划分为行和列,并将其管理的每个小部件放入正确的单元格中。
列和行的行为相同;我们将讨论列,但行也有等价的函数。
每列都有一个最小宽度和一个拉伸因子。最小宽度是使用 setColumnMinimumWidth() 设置的最大宽度和该列中每个小部件的最小宽度。拉伸因子使用 setColumnStretch() 设置,并确定列将获得多少可用空间超过其必要的最小值。
通常,使用 addWidget() 将每个托管小部件或布局放入其自己的单元格中。小部件也可以使用 addItem() 和 addWidget() 的行和列跨越重载来占据多个单元格。如果这样做, QGridLayout 将猜测如何在列/行上分配大小(基于拉伸因子)。
要从布局中删除小部件,请调用 removeWidget()。在小部件上调用 QWidget::hide() 也会有效地从布局中删除小部件,直到调用 QWidget::show()。

源码:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QGridLayout>
#include <QString>
#include <QPushButton>
#include <QLabel>
#include <QDebug>
#include <QLineEdit>
#include <QCheckBox>

class Widget : public QWidget
{
    Q_OBJECT
    
    QPushButton m_btn1;
    QPushButton m_btn2;
    
protected slots:
    void OnClicked1();
    void OnClicked2();
public:
    QString  FetchString(const char* s);
    Widget(QWidget *parent = nullptr);
    ~Widget();
};
#endif // WIDGET_H
#include "Widget.h"
#include <QVBoxLayout>
#include <QGridLayout>
#include <QMessageBox>
#include <QPixmap>

Widget::Widget(QWidget *parent) : QWidget(parent, Qt::WindowFlags()|Qt::WindowCloseButtonHint)
{
    m_btn1.setText(FetchString("方法:"));
    m_btn2.setText(FetchString("项目"));
    
    QVBoxLayout* vLayout = new QVBoxLayout();
    
    vLayout->addWidget(&m_btn1);
    vLayout->addWidget(&m_btn2);
    
    connect(&m_btn1, SIGNAL(clicked()), this, SLOT(OnClicked1()));
    connect(&m_btn2, SIGNAL(clicked()), this, SLOT(OnClicked2()));
    setLayout(vLayout);
    
    setFixedSize(320, 80);
}

void Widget::OnClicked1()
{
    QDialog dia(this);
    QGridLayout* gLayout = new QGridLayout();
    
    QPushButton* pButton1 = new QPushButton(FetchString("One"));
    QPushButton* pButton2 = new QPushButton(FetchString("Two"));
    QPushButton* pButton3 = new QPushButton(FetchString("Three"));
    QPushButton* pButton4 = new QPushButton(FetchString("Four"));
    QPushButton* pButton5 = new QPushButton(FetchString("Five"));
    QPushButton* pButton6 = new QPushButton(FetchString("Six1"));
    QPushButton* pButton7 = new QPushButton(FetchString("Seven"));
    
    pButton1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pButton2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pButton3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pButton4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pButton5->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pButton6->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    pButton7->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    
    gLayout->addWidget(pButton1, 0, 1);
    gLayout->addWidget(pButton2, 1, 0, 2, 1);
    gLayout->addWidget(pButton3, 1, 1);
    gLayout->addWidget(pButton4, 1, 2);
    gLayout->addWidget(pButton5, 2, 1);
    gLayout->addWidget(pButton6, 3, 0, 1, 3);
    gLayout->addWidget(pButton7, 4, 1);
    
    gLayout->setColumnStretch(0, 1);
    gLayout->setColumnStretch(1, 1);
    gLayout->setColumnStretch(2, 2);
    gLayout->setRowStretch(0, 1);
    gLayout->setRowStretch(1, 2);
    gLayout->setRowStretch(2, 2);
    gLayout->setRowStretch(3, 2);
    gLayout->setRowStretch(4, 2);
    
    dia.setLayout(gLayout);
    dia.exec();
}

void Widget::OnClicked2()
{
    QDialog dia(this);
    QGridLayout* gLayout = new QGridLayout();
    
    QLineEdit* Useredit = new QLineEdit();
    QLineEdit* PassWdedit = new QLineEdit();
    QCheckBox* check1 = new QCheckBox(FetchString("记住密码"));
    QCheckBox* check2 = new QCheckBox(FetchString("自动登录"));
    QPushButton* pBtn = new QPushButton(FetchString("登录"));
    QPushButton* btn1 = new QPushButton(FetchString("申请账号"));
    QPushButton* btn2 = new QPushButton(FetchString("找回密码"));
    
    QPixmap pix("D:/Project/Sample/Sample007/Label.ico");
    QLabel* label = new QLabel(FetchString("测试"));
    label->setPixmap(pix);
    label->setScaledContents(true);
    
    Useredit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    Useredit->setPlaceholderText(FetchString("账号:"));
    PassWdedit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    PassWdedit->setPlaceholderText(FetchString("密码:"));
    
    btn1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    btn1->setStyleSheet("border:none");
    btn1->setFlat(true);
    btn2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    btn2->setStyleSheet("border:none");
    btn2->setFlat(true);
    
    
    gLayout->addWidget(label, 0, 0, 3, 1);
    gLayout->addWidget(Useredit, 0, 1, 1, 3);
    gLayout->addWidget(PassWdedit, 1, 1, 1, 3);
    gLayout->addWidget(btn1, 0, 5);
    gLayout->addWidget(btn2, 1, 5);
    gLayout->addWidget(check1, 2, 1);
    gLayout->addWidget(check2, 2, 3);
    gLayout->addWidget(pBtn, 3, 1, 1, 3);
    
    dia.setLayout(gLayout);
    dia.setFixedSize(300, 130);
    dia.exec();
}

QString Widget::FetchString(const char* s)
{
    return QString::fromLocal8Bit(s);
}

Widget::~Widget()
{
}

运行效果如下:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值