Qt-基本布局介绍
程序员文章站
2022-06-14 15:31:28
...
Qt中常见的布局管理器有QBoxLayout、QGridLayout、QFormLayout,QHBoxLayout是以水平或者垂直方向来排列部件,而QHBoxLayout和QVBoxLayout是QHBoxLayout的两个便子类,顾名思义QHBoxLayout是以水平方向对部件进行排列,QVBoxLayout以垂直方向对部件进行排列。QGridLayout其中含Grid字眼我们就可以知道它是以网格的形式对部件进行排列。QFormLayout它是以垂直方向对其子部件进行管理,但是其内部的子部件包含两部分:左列为标签,右列为输入字段。 以上是常用的布局管理器。
对于使用QBoxLayout,其的构造函数的形式如下:
QBoxLayout(QBoxLayout::Direction dir, QWidget *parent = nullptr)
对于QBoxLayout::Direction有四种取值:
内容 | 值 | 含义 |
QBoxLayout::LeftToRight | 0 | 部件从左到右进行排列 |
QBoxLayout::RightToLeft | 1 | 部件从右到左进行排列 |
QBoxLayout::TopToBottom | 2 | 部件从上到下进行排列 |
QBoxLayout::BottomToTop | 3 | 部件从下到上进行排列 |
可以通过下面的方法给QBoxLayout添加子部件:
void addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())//给QBoxLayout添加子控件。
void addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())//给QBoxLayout添加子控件。
void addSpacing(int size)//创建一个空框;该方法主要是为了创建美观的布局,从而需要一些站位的空框。
void addStretch(int stretch = 0)//创建一个空的可拉伸的框,同样是站位作用。
void addLayout(QLayout *layout, int stretch = 0)//向行中添加另外一个Layout框。
对于使用QHBoxLayout,可以通过下面代码实现简单的水平布局:
QWidget *window = new QWidget;
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;//创建水平布局
layout->addWidget(button1);//添加子控件
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);//主界面对话设置布局
window->show();
效果如下所示:
对于使用QVBoxLayout,可以通过下面代码实现简单的水平布局:
QWidget *window = new QWidget;
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);
window->setLayout(layout);//主界面添加布局
window->show();
对于使用QGridLayout,可以通过下面代码实现简单的水平布局对于使用QGridLayout,可以通过下面代码实现简单的水平布局
nameLabel = new QLabel(tr("&Name:"));
nameLabel->setBuddy(nameLineEdit);
emailLabel = new QLabel(tr("&Name:"));
emailLabel->setBuddy(emailLineEdit);
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);
对于使用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);
setLayout(formLayout);
效果如下: