QT布局介绍

QT常用布局如上图所示

水平/垂直布局

常用api:

特别注意的

addSapcing是在setSpacing上做加法处理,其中值可为正可为负

bash 复制代码
	 QHBoxLayout* layout = new QHBoxLayout(this);

    QLabel* lbl = new QLabel(this);
//    lbl->setFixedSize(40, 32);
    lbl->setText(tr("路径"));

    QLineEdit *pLineEdit = new QLineEdit(this);
//    pLineEdit->setFixedSize(100,32);
    pLineEdit->setMinimumWidth(50);

    QPushButton* pBtn = new QPushButton(this);
//    pBtn->setFixedSize(50,32);
    pBtn->setText(tr("打开"));

    qDebug() << "default widget content spacing: " << layout->spacing();

    layout->addWidget(lbl);
    layout->addSpacing(13);
    layout->addWidget(pLineEdit);
    layout->addSpacing(-7);
    layout->addWidget(pBtn);

    setLayout(layout);

    layout->setContentsMargins(20,0,20,0);

栅格布局

QGridLayout常用api

bash 复制代码
void addWidget(QWidget *, int row, int column, Qt::Alignment = Qt::Alignment());
    void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = Qt::Alignment());
    void addLayout(QLayout *, int row, int column, Qt::Alignment = Qt::Alignment());
    void addLayout(QLayout *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = Qt::Alignment());

如上addWidget的入参中row和column分别对应行和列索引值,rowSpan/columnSpan分别对应所占行和列数,如果想要添加到布局的控件占用宽和高度分别为2和3,则设置rowSpan为2且columnSpan为3

bash 复制代码
void setContentsMargins(int left, int top, int right, int bottom);//设置布局和外部其他控件的外间隔,左/上/右/下


void setHorizontalSpacing(int spacing);分别设置水平和垂直的布局内控件的内间隔
int horizontalSpacing() const;
void setVerticalSpacing(int spacing);
int verticalSpacing() const;

栅格布局想要实现如下效果

对应代码如下

bash 复制代码
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinMaxButtonsHint);

    ui->setupUi(this);
    this->resize(400,300);

    //头像
    QLabel *pImageLabel = new QLabel(this);
    QPixmap pixmap(":/test.png");
    pImageLabel->setFixedSize(150,150);
    pImageLabel->setPixmap(pixmap);
    pImageLabel->setScaledContents(true);

    QLineEdit *pUserNameLe = new QLineEdit(this);
    pUserNameLe->setFixedSize(300, 50);
    pUserNameLe->setPlaceholderText(tr("QQ/手机/邮箱"));

    QLineEdit *pPasswordLe = new QLineEdit(this);
    pPasswordLe->setFixedSize(300, 50);
    pPasswordLe->setPlaceholderText(tr("密码"));
    pPasswordLe->setEchoMode(QLineEdit::Password);

    QPushButton *pForgetBtn = new QPushButton(this);
    pForgetBtn->setText(tr("找回密码"));
    pForgetBtn->setFixedWidth(80);

    QCheckBox *pRemeberCb = new QCheckBox(this);
    pRemeberCb->setText(tr("记住密码"));

    QCheckBox *pAutoLoginCb = new QCheckBox(this);
    pAutoLoginCb->setText(tr("自动登录"));

    QPushButton *pLoginBtn = new QPushButton(this);
    pLoginBtn->setText(tr("登录"));
    pLoginBtn->setFixedHeight(48);

    QPushButton *pRegisteRBtn = new QPushButton(this);
    pRegisteRBtn->setText(tr("注册账号"));
    pRegisteRBtn->setFixedHeight(48);

    QGridLayout* layout = new QGridLayout(this);
    //api原型
//    void addWidget(QWidget *, int row, int column, Qt::Alignment = Qt::Alignment());
//    void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = Qt::Alignment());

    layout->addWidget(pImageLabel, 0, 0, 3,1);
    layout->addWidget(pUserNameLe, 0, 1, 1,2);
    layout->addWidget(pPasswordLe, 1, 1, 1,2);
    layout->addWidget(pForgetBtn, 2, 1, 1,1);

    layout->addWidget(pRemeberCb, 2, 2, 1,1, Qt::AlignLeft | Qt::AlignVCenter);
    layout->addWidget(pAutoLoginCb, 2, 2, 1,1, Qt::AlignRight | Qt::AlignVCenter);

    layout->addWidget(pLoginBtn, 3,1,1,2);
    layout->addWidget(pRegisteRBtn,4,1,1,2);

    //分别设置水平和垂直的布局内控件的内间隔
    layout->setHorizontalSpacing(20);
    layout->setVerticalSpacing(20);

    //设置布局和外部其他控件的外间隔,左/上/右/下
    layout->setContentsMargins(30,30,30,30);

    setLayout(layout);
相关推荐
灯澜忆梦17 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-17 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-17 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白18 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
段一凡-华北理工大学20 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe20 小时前
C++——多态
开发语言·c++
心平气和量大福大21 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_1 天前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸1 天前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
Quz1 天前
QML 信号与槽:直接绑定与跨文件通信
qt·编程语言·设计