Qt 界面布局

2020-02-02  本文已影响0人  wjundong

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);
}

效果图
上一篇 下一篇

猜你喜欢

热点阅读