记录一下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的大小

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用Qt信号和槽记录按钮点击次数的示例代码: ``` #include <QtWidgets> class Counter : public QWidget { Q_OBJECT public: Counter(QWidget *parent = nullptr); private: QLabel *valueLabel; QPushButton *countButton; int count; private slots: void incrementCount(); }; Counter::Counter(QWidget *parent) : QWidget(parent), count(0) { valueLabel = new QLabel("0", this); valueLabel->setAlignment(Qt::AlignCenter); valueLabel->setFixedSize(100, 50); countButton = new QPushButton("Count", this); countButton->setFixedSize(100, 50); connect(countButton, SIGNAL(clicked()), this, SLOT(incrementCount())); QHBoxLayout *layout = new QHBoxLayout(); layout->addWidget(valueLabel); layout->addWidget(countButton); setLayout(layout); } void Counter::incrementCount() { count++; valueLabel->setText(QString::number(count)); } int main(int argc, char *argv[]) { QApplication app(argc, argv); Counter counter; counter.show(); return app.exec(); } ``` 在这个示例中,Counter类继承自QWidget,它有一个值标签和一个计数按钮。在构造函数中,我们创建了这些小部件并将它们添加到布局中。我们还将计数按钮的clicked信号连接到incrementCount槽。 incrementCount槽只是简单地增加计数并将其显示在值标签上。 当我们运行这个应用程序时,它会显示一个窗口,其中包含一个值标签和一个计数按钮。每次单击计数按钮时,计数将增加,并且值标签将更新以反映新计数值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值