布局管理器
-- 提供相关类对界面组件进行布局管理;
* 能够自动排列窗口中的界面组件;
* 窗口变化会自动更新界面组件的大小;
QLayout 是 Qt 中布局管理器的抽象基类
* 通过继承 QLayout 实现功能各异且互补的布局管理器
* Qt 中可以根据需要自定义布局管理器
* 布局管理器不是界面部件,而是界面部件的定位策略
水平布局管理 (QHBoxLayout)
void Widget::testHBoxLayout()
{
QHBoxLayout* layout = new QHBoxLayout();
TestBtn1.setText("Test Button 1");
TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn1.setMinimumSize(160, 30);
TestBtn2.setText("Test Button 2");
TestBtn2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn2.setMinimumSize(160, 30);
TestBtn3.setText("Test Button 3");
TestBtn3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn3.setMinimumSize(160, 30);
TestBtn4.setText("Test Button 4");
TestBtn4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn4.setMinimumSize(160, 30);
layout->setSpacing(30);
layout->addWidget(&TestBtn1);
layout->addWidget(&TestBtn2);
layout->addWidget(&TestBtn3);
layout->addWidget(&TestBtn4);
setLayout(layout);
}
垂直布局管理 (QVBoxLayout)
void Widget::testVBoxLayout() //垂直布局管理器
{
QVBoxLayout* layout = new QVBoxLayout(); //对象
TestBtn1.setText("Test Button 1");
TestBtn1.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); //布局管理器(水平上扩展,垂直上扩展)
TestBtn1.setMinimumSize(160, 30); //最小窗口,自适应的变大变小;
TestBtn2.setText("Test Button 2");
TestBtn2.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn2.setMinimumSize(160, 30);
TestBtn3.setText("Test Button 3");
TestBtn3.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn3.setMinimumSize(160, 30);
TestBtn4.setText("Test Button 4");
TestBtn4.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
TestBtn4.setMinimumSize(160, 30);
layout->setSpacing(30); //按钮之间的距离为30;
layout->addWidget(&TestBtn1); //布局管理器管理的组件有哪些?
layout->addWidget(&TestBtn2);
layout->addWidget(&TestBtn3);
layout->addWidget(&TestBtn4);
layout->setStretch(0,1); //设置按不同比例改变大小;
//layout->setStrechFactor(&TestBtn1,1);
layout->setStretch(1,2);
layout->setStretch(2,2);
layout->setStretch(3,1);
setLayout(layout); //告诉窗口,设置的布局管理器
}