ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QT开发 - 布局

2021-09-17 17:05:15  阅读:209  来源: 互联网

标签:Widget layout QT 布局 开发 QLineEdit QPushButton addWidget new


1. QHBoxLayout

Widget::Widget(QWidget *parent)
    : QWidget(parent) {

    QPushButton *button1 = new QPushButton("One");
    QPushButton *button2 = new QPushButton("Two");
    QPushButton *button3 = new QPushButton("Three");
    QPushButton *button4 = new QPushButton("Four");
    QPushButton *button5 = new QPushButton("Five");

    QHBoxLayout *layout = new QHBoxLayout(this);

    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);
}

Widget::~Widget() {
}

在这里插入图片描述

2. HVBoxLayout

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent) {

    QPushButton *button1 = new QPushButton("One");
    QPushButton *button2 = new QPushButton("Two");
    QPushButton *button3 = new QPushButton("Three");
    QPushButton *button4 = new QPushButton("Four");
    QPushButton *button5 = new QPushButton("Five");

    QVBoxLayout *layout = new QVBoxLayout();

    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);
	
	setLayout(layout); // 如果layout构造函数使用this,就可以省略这句代码
}

Widget::~Widget() {
}

在这里插入图片描述

3. QHBoxLayout 和 QVBoxLayout 复合布局

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent) {

    QPushButton *button1 = new QPushButton("One");
    QPushButton *button2 = new QPushButton("Two");
    QPushButton *button3 = new QPushButton("Three");
    QPushButton *button4 = new QPushButton("Four");
    QPushButton *button5 = new QPushButton("Five");

    QHBoxLayout *layout = new QHBoxLayout(this);

    layout->addWidget(button1);
    layout->addWidget(button2);
    layout->addWidget(button3);
    layout->addWidget(button4);
    layout->addWidget(button5);

    QPushButton *button11 = new QPushButton("1");
    QPushButton *button22 = new QPushButton("2");
    QPushButton *button33 = new QPushButton("3");
    QPushButton *button44 = new QPushButton("4");
    QPushButton *button55 = new QPushButton("5");

    QVBoxLayout *vLayout = new QVBoxLayout();
    vLayout->addWidget(button11);
    vLayout->addWidget(button22);
    vLayout->addWidget(button33);
    vLayout->addWidget(button44);
    vLayout->addWidget(button55);

    layout->addLayout(vLayout);
}

Widget::~Widget() {
}

在这里插入图片描述

  • 设定控件间固定的间距
// button2 和 button3之间间距100
layout->addWidget(button1);
layout->addWidget(button2);
layout->addSpacing(100);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);

在这里插入图片描述

  • 控件间可以自由拉伸
// 拉伸整体窗口的时候是在button2 和 button3之间可以自由拉伸
layout->addWidget(button1);
layout->addWidget(button2);
layout->addStretch();
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
  • 间隔一定距离基础上进行缩小或者拉伸
// button4 和 button5 之间默认间隔距离100,随着整体窗口的拉伸,这个距离可以进一步拉伸且不会影响其他按钮的大小
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addSpacerItem(new QSpacerItem(100,100, QSizePolicy::MinimumExpanding));
layout->addWidget(button5);

默认大小
在这里插入图片描述
拉伸
在这里插入图片描述

4. QFormLayout

QLineEdit *nameLineEdit = new QLineEdit();
QLineEdit *emailLineEdit = new QLineEdit();
QLineEdit *ageSpinBox = new QLineEdit();

QFormLayout *formLayout = new QFormLayout;
formLayout->addRow(tr("&Name:"), nameLineEdit);
formLayout->addRow(tr("&Email:"), emailLineEdit);
formLayout->addRow(tr("&Age:"), ageSpinBox);
// formLayout->setFieldGrowthPolicy(QFormLayout::FieldGrowthPolicy::AllNonFixedFieldsGrow); // 这段代码可以对QLineEdit这一列进行拉伸
setLayout(formLayout);

5. QGridLayout

QLineEdit *nameLineEdit = new QLineEdit();
QLineEdit *emailLineEdit = new QLineEdit();
QLineEdit *ageSpinBox = new QLineEdit();

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

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

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

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);
setLayout(gridLayout);

6. QStackedLayout

QWidget *firstPageWidget = new QWidget;
QLabel *firstLabel = new QLabel("first widget", firstPageWidget);
QWidget *secondPageWidget = new QWidget;
QLabel *secondLabel = new QLabel("second widget", secondPageWidget);
QWidget *thirdPageWidget = new QWidget;
QLabel *thirdLabel = new QLabel("third widget", thirdPageWidget);

QStackedLayout *stackedLayout = new QStackedLayout;
stackedLayout->addWidget(firstPageWidget);
stackedLayout->addWidget(secondPageWidget);
stackedLayout->addWidget(thirdPageWidget);

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(stackedLayout);
setLayout(mainLayout);

stackedLayout->setCurrentIndex(0); // 设置 firstPageWidget为当前显示的widget
//stackedLayout->setCurrentIndex(1); // 设置 secondPageWidget为当前显示的widget
//stackedLayout->setCurrentIndex(2); // 设置 thirdPageWidget为当前显示的widget

标签:Widget,layout,QT,布局,开发,QLineEdit,QPushButton,addWidget,new
来源: https://blog.csdn.net/codeos/article/details/120347494

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有