QGridLayout 网格布局
addWidget ()
括号内有四个参数。分别为所添加组件位置的行数、列数、所添加组件占的行数、列数
Layout::Layout(QWidget *parent)
: QWidget(parent)
{
// 在当前 QWidget 中创建网格布局
QGridLayout *mainLayout = new QGridLayout(this);
QTextBrowser *textBrowser1 = new QTextBrowser();
QTextBrowser *textBrowser2 = new QTextBrowser();
QPushButton *button1 = new QPushButton("按钮 1");
QPushButton *button2 = new QPushButton("按钮 2");
QPushButton *button3 = new QPushButton("按钮 3");
QPushButton *button4 = new QPushButton("按钮 4");
QPushButton *button5 = new QPushButton("按钮 5");
// 设置两个文本框所占行数列数都为 2
mainLayout->addWidget(textBrowser1, 0, 0, 2, 2);
mainLayout->addWidget(textBrowser2, 2, 0, 2, 2);
// 在第二列加入四个 button,0 ~ 3行
mainLayout->addWidget(button1, 0, 2);
mainLayout->addWidget(button2, 1, 2);
mainLayout->addWidget(button3, 2, 2);
mainLayout->addWidget(button4, 3, 2);
// 最后一个 button 占 1 个行数,3 个列数
mainLayout->addWidget(button5, 4, 0, 1, 3);
}
效果图
布局嵌套
水平布局和垂直布局比较简单,可直接看布局嵌套。
Layout::Layout(QWidget *parent)
: QWidget(parent)
{
// 父布局为水平布局
QHBoxLayout *mainLayout = new QHBoxLayout(this);
// 左右两个子布局都为垂直布局
QVBoxLayout *leftLayout = new QVBoxLayout;
QVBoxLayout *rightLayout = new QVBoxLayout;
// 左边布局只放一个 textBrowser1 代表棋盘
QTextBrowser *textBrowser1 = new QTextBrowser();
leftLayout->addWidget(textBrowser1);
// 创建一个水平布局用来放置 button
QHBoxLayout *buttonLayout = new QHBoxLayout;
QPushButton *button1 = new QPushButton("悔棋");
QPushButton *button2 = new QPushButton("认输");
buttonLayout->addWidget(button1);
buttonLayout->addWidget(button2);
// 右边布局由三个部分组成,两个组件和一个放置button 的水平布局
QTextBrowser *textBrowser2 = new QTextBrowser();
QTextBrowser *textBrowser3 = new QTextBrowser();
rightLayout->addWidget(textBrowser2);
rightLayout->addWidget(textBrowser3);
rightLayout->addLayout(buttonLayout);
// 设置布局中的各个部分的比例
rightLayout->setStretchFactor(textBrowser2, 2);
rightLayout->setStretchFactor(textBrowser3, 5);
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
mainLayout->setStretchFactor(leftLayout, 5);
mainLayout->setStretchFactor(rightLayout, 1);
}
效果图
网友评论