QLayout 布局常见使用方法

常用的三种布局方法:

水平布局类QHBoxLayout
垂直布局类QVBoxLayout
网格布局类QGridLayout

头文件:

include <QHBoxLayout>
include <QVBoxLayout>
include <QGridLayout>

水平布局:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *w = new QWidget;
    QPushButton* button00 = new QPushButton("0");
    QPushButton* button01 = new QPushButton("1");
    QPushButton* button02 = new QPushButton("2");
    QPushButton* button03 = new QPushButton("3");
    QPushButton* button04 = new QPushButton("4");
    QHBoxLayout* layout = new QHBoxLayout();

    layout->addWidget(button00);
    layout->addWidget(button01);
    layout->addWidget(button02);
    layout->addWidget(button03);
    layout->addWidget(button04);

    w->setLayout(layout);
    w->show();
    
    return a.exec();
}

效果图:

1.jpg

垂直布局:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *w = new QWidget;
    QPushButton* button00 = new QPushButton("0");
    QPushButton* button01 = new QPushButton("1");
    QPushButton* button02 = new QPushButton("2");
    QPushButton* button03 = new QPushButton("3");
    QPushButton* button04 = new QPushButton("4");
    QVBoxLayout* layout = new QVBoxLayout();

    layout->addWidget(button00);
    layout->addWidget(button01);
    layout->addWidget(button02);
    layout->addWidget(button03);
    layout->addWidget(button04);

    w->setLayout(layout);
    w->show();
    
    return a.exec();
}

效果图:

2.jpg

网格布局:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *w = new QWidget;
    QPushButton* button00 = new QPushButton("0");
    QPushButton* button01 = new QPushButton("1");
    QPushButton* button02 = new QPushButton("2");
    QPushButton* button03 = new QPushButton("3");
    QPushButton* button04 = new QPushButton("4");
    QPushButton* button05 = new QPushButton("5");
    QPushButton* button06 = new QPushButton("6");
    QPushButton* button07 = new QPushButton("7");
    QPushButton* button08 = new QPushButton("8");
    QPushButton* button09 = new QPushButton("9");

    QGridLayout* layout = new QGridLayout();

    //QGridLayout需指定控件位置,以0开始
    layout->addWidget(button00, 0, 0);
    layout->addWidget(button01, 0, 1);
    layout->addWidget(button02, 0, 2);
    layout->addWidget(button03, 1, 0);
    layout->addWidget(button04, 1, 1);
    layout->addWidget(button05, 1, 2);
    layout->addWidget(button06, 2, 0);
    layout->addWidget(button07, 2, 1);
    layout->addWidget(button08, 2, 2);
    //addWidget的重载,可理解成:从第4行第一位开始,占用3个位置
    layout->addWidget(button09, 3, 0, 3, 3);

    w->setLayout(layout);
    w->show();

    return a.exec();
}

效果图:

3.jpg

嵌套布局:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget *w = new QWidget;
    QPushButton* button00 = new QPushButton("0");
    QPushButton* button01 = new QPushButton("1");
    QPushButton* button02 = new QPushButton("2");
    QPushButton* button03 = new QPushButton("3");
    QPushButton* button04 = new QPushButton("4");
    QPushButton* button05 = new QPushButton("5");
    QPushButton* button06 = new QPushButton("6");

    QHBoxLayout* layoutH = new QHBoxLayout();
    QVBoxLayout* layoutV = new QVBoxLayout();

    layoutH->addWidget(button00);
    layoutH->addWidget(button01);
    layoutH->addWidget(button02);
    layoutH->addWidget(button03);

    layoutV->addWidget(button04);
    layoutV->addWidget(button05);
    layoutV->addWidget(button06);

    //将纵向布局layoutV加入到横向布局layoutH中
    layoutH->addLayout(layoutV);
    
    w->setLayout(layoutH);
    w->show();

    return a.exec();
}

效果图:

4.png

当改变顺序时:

    layoutH->addWidget(button00);
    layoutH->addWidget(button01);
    layoutH->addLayout(layoutV); //改变了插入的位置
    layoutH->addWidget(button02);
    layoutH->addWidget(button03);

    layoutV->addWidget(button04);
    layoutV->addWidget(button05);
    layoutV->addWidget(button06);

效果图:

5.jpg

构建子控件时不需指定parent,布局自动指定parent with QWidget::setParent()
布局中的控件是安装此布局的界面的子空间,控件只能以控件作为parent

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,926评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,079评论 2 59
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 1,619评论 0 10
  • 每个人都有迷茫的时候,感觉未来遥遥无期。不知下一步该走向哪里,既然不能预测未来,那又何必花大把时间用来彷徨。何不用...
    北方小确幸阅读 140评论 0 1
  • 现在淘客店铺已经不是那么好做的了,甚至有很多人打着自动营销软件的幌子来骗后来者的软件费用。去年店铺淘客的预期收入:...
    董小姐的姐妹阅读 335评论 0 0