Qt中的布局管理器

概述:
所谓 GUI 界面,归根结底,就是一堆组件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,组件的位置尤其重要。我们必须要指定组件放在哪里,以 便窗口能够按照我们需要的方式进行渲染。这就涉及到组件定位的机制。
Qt 提供了两种组件定位机制:绝对定位和布局定位。
绝对定位:绝对定位就是一种最原始的定位方法:给出这个组件的坐标和长宽值。这样,Qt 就知道该把组件放在哪里以及如何设置组件的大小。但是这样做带来的一个问题是,如果用户改变了窗 口大小,比如点击最大化按钮或者使用鼠标拖动窗口边缘,采用绝对定位的组件是不会有任何响应的。这也很自然,因为你并没有告诉 Qt,在窗口变化时,组件是否要更新自己以及如何更新。如 果你需要让组件自动更新——这是很常见的需求,比如在最大化时,Word 总会把稿纸区放大,把工具栏拉长——就要自己编写相应的函数来响应这些变化。或者,还有更简单的方法:禁止用户改 变窗口大小。但这总不是长远之计。
布局定位:你只要把组件放入某一种布局,布局由专门的布局管理器进行管理。当需要调整大小或者位置的时候,Qt 使用对应 的布局管理器进行调整。
1,使用滑竿和输入框双向数据绑定
比如使用两个组件,QSpinBoxQSlider来实现相互改变值


    QSpinBox *spin = new QSpinBox(this);
    QSlider *slider = new QSlider(Qt::Horizontal,this);//水平放置一个滑竿
    /*设置变化范围为0-100*/
   spin->setRange(0, 100);
   slider->setRange(0, 100);
   /*连接信号*/
   connect(slider,&QSlider::valueChanged,spin,&QSpinBox::setValue);
   void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;
   connect(spin,spinBoxSignal,slider,&QSlider::setValue);
   spin->setValue(18);

   QHBoxLayout *layout = new QHBoxLayout;
   layout->addWidget(spin);
   layout->addWidget(slider);
   this->setLayout(layout);

执行结果如下
在这里插入图片描述
对于有布局的组件改变窗口的大小是不影响它的相对位置的;
注意:
低于双向数据绑定的时候由于函数valueChanged(int i)是重载函数所以要显示指定或者强制转换避免编译错误。
2,Qt提供的布局管理器

<1>水平布局
QHBoxLayout //按照水平方向从左到右布局;
<2>垂直布局
QVBoxLayout:按照竖直方向从上到下布局;
<3>网格布局
QGridLayout:在一个网格中进行布局,类似于 HTML 的 table;
<4>
QFormLayout:按照表格布局,每一行前面是一段文本,文本后面跟随一个组件(通常是输入框),类似 HTML 的 form;
<5>
QStackedLayout:层叠的布局,允许我们将几个组件按照 Z 轴方向堆叠,可以形成向导那种一页一页的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值