记录一下QHBoxLayout布局

以前些QBoxLayout的时候,只知道往里面addWidget,QBoxLayout会修改添加进去的widget的size,

1.单独添加控件

    setFixedHeight(30);

    m_pLableText1 = new QLabel(this);
    m_pLableText2 = new QLabel(this);
    m_pButton1 = new QPushButton(this);
    m_pButton2 = new QPushButton(this);
    m_pButton3 = new QPushButton(this);

    m_pButton1->setText("1");
    m_pButton2->setText("2");
    m_pButton3->setText("3");

    //m_pLableText1->setText(u8"text");
    //m_pLableText2->setText(u8"text2");

    QHBoxLayout *pHLayout = new QHBoxLayout(this);
    pHLayout->addWidget(m_pButton1);
    pHLayout->addWidget(m_pButton2);
    pHLayout->addWidget(m_pButton3);
    pHLayout->setContentsMargins(0, 0, 0, 0);//默认有margin,不设置成0可能导致内部控件显示不全

    setLayout(pHLayout);

如下

2.设置大小

    m_pButton1->resize(100, 40);
    m_pButton3->resize(200, 80);

实际上resize没有任何影响,还是如上图一样

如果要设置大小,可以设置strech

    pHLayout->addWidget(m_pButton1, 1);
    pHLayout->addWidget(m_pButton2, 2);
    pHLayout->addWidget(m_pButton3);

3.设置对齐方式

    pHLayout->addWidget(m_pButton1, 1);
    pHLayout->addWidget(m_pButton2, 2, Qt::AlignRight);
    pHLayout->addWidget(m_pButton3);

stretch失效了

同时设置stretch和align

    pHLayout->addWidget(m_pButton1, 1);
    pHLayout->addWidget(m_pButton2, 2, Qt::AlignRight);
    pHLayout->addWidget(m_pButton3, 1, Qt::AlignRight);

stretch失效(大小一样),但是多了间隔

4.大小固定setFixedSize

    m_pButton1->setFixedSize(50, 30);
    m_pButton2->setFixedSize(50, 30);
    m_pButton3->setFixedSize(50, 40);

    QHBoxLayout *pHLayout = new QHBoxLayout(this);
    pHLayout->addWidget(m_pButton1, 1);
    pHLayout->addWidget(m_pButton2, 2, Qt::AlignRight);
    pHLayout->addWidget(m_pButton3, 1, Qt::AlignRight);
    pHLayout->setContentsMargins(0, 0, 0, 0);

大小不会被改变了,不会突然被拉伸,

取消stretch,和align

    m_pButton1->setFixedSize(50, 30);
    m_pButton2->setFixedSize(50, 30);
    m_pButton3->setFixedSize(50, 40);

    QHBoxLayout *pHLayout = new QHBoxLayout(this);
    pHLayout->addWidget(m_pButton1);
    pHLayout->addWidget(m_pButton2);
    pHLayout->addWidget(m_pButton3);
    pHLayout->setContentsMargins(0, 0, 0, 0);

变成正常均匀分布

5.部分控件大小固定

    setFixedHeight(30);

    m_pLableText1 = new QLabel(this);
    m_pLableText2 = new QLabel(this);
    m_pButton1 = new QPushButton(this);
    m_pButton2 = new QPushButton(this);
    m_pButton3 = new QPushButton(this);

    m_pButton1->setText("1");
    m_pButton2->setText("2");
    m_pButton3->setText("3");

    m_pLableText1->setText(u8"text");
    //m_pLableText2->setText(u8"text2");

    m_pButton1->setFixedSize(50, 30);
    m_pButton2->setFixedSize(50, 30);
    m_pButton3->setFixedSize(50, 40);

    QHBoxLayout *pHLayout = new QHBoxLayout(this);
    pHLayout->addWidget(m_pLableText1);
    pHLayout->addWidget(m_pButton1);
    pHLayout->addWidget(m_pButton2);
    pHLayout->addWidget(m_pButton3);
    pHLayout->setContentsMargins(0, 0, 0, 0);

    setLayout(pHLayout);

大小固定的控件集中到一侧了

调整addWidget顺序

    pHLayout->addWidget(m_pButton1);
    pHLayout->addWidget(m_pLableText1);
    pHLayout->addWidget(m_pButton2);
    pHLayout->addWidget(m_pButton3);

大小固定的集中到一侧,由大小不固定的分隔,

再插入一个大小不固定的控件

    m_pLableText1->setText(u8"text");
    m_pLableText2->setText(u8"text2");

    m_pButton1->setFixedSize(50, 30);
    m_pButton2->setFixedSize(50, 30);
    m_pButton3->setFixedSize(50, 40);

    QHBoxLayout *pHLayout = new QHBoxLayout(this);
    pHLayout->addWidget(m_pButton1);
    pHLayout->addWidget(m_pLableText1);//分隔
    pHLayout->addWidget(m_pButton2);
    pHLayout->addWidget(m_pLableText2);//分隔
    pHLayout->addWidget(m_pButton3);
    pHLayout->setContentsMargins(0, 0, 0, 0);

    setLayout(pHLayout);

多一个分隔

6.设置铺满剩余空间

m_pButton3->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));

详见https://doc.qt.io/qt-5/qsizepolicy.html

Expanding就是铺满剩余空间的意思

这样layout自动布局的时候就会动态调整m_pButton3的大小

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值