Qt 布局操作记录

布局类型

QVBoxLayout *vLayout = new QVBoxLayout();  // 垂直布局
QHBoxLayout *hLayout = new QHBoxLayout();  // 水平布局
QGridLayout *gridLayout = new QGridLayout(); // 网格布局

垂直布局将控件垂直排列,水平布局将控件水平排列,网格布局将控件按网格排列。

设置布局

  1. 在创建布局时设置
QVBoxLayout *mainLayout = new QVBoxLayout(this);

上面的代码表示创建了一个垂直布局(指针对象) mainLayout,而且将当前对象 this 的布局设置为 mainLayout
2. 使用setLayout()函数设置

widget->setLayout(layout);

上述代码通过调用setLayout()函数将widget布局设置为layout

添加控件到布局

mainLayout->addWidget(button1);
mainLayout->addWidget(button2);

使用addWdiget函数可以将控件添加到指定布局中,上述代码添加了两个按钮控件到布局 mainLayout 中,这两个按钮将会垂直排列显示。

父对象的改变

布局对父对象的改变:
(1)将控件添加到布局之前,如果该控件已经被设置了父对象,那么布局不会改变其父对象。
(2)当我们使用layout->addWidget(widget)时,如果该widget还没有父对象,则布局会将其父对象设置为该布局所属的widget

布局嵌套

一个布局可以嵌套另一个布局。

HBoxLayout *subLayout = new HBoxLayout(subWidget);
mainLayout->addLayout(subLayout);

上述代码表示水平布局subLayout嵌套在垂直布局mainLayout中。

重复设置布局的问题

QVBoxLayout *mainLayout = new QVBoxLayout(this);
QHBoxLayout *titleLayout = new QHBoxLayout(this);

上面的代码会报以下问题
QLayout: Attempting to add QLayout "" to MainWindow "", which already has a layout
因为,当前对象 this 已经设置了布局后,我们尝试再次对其设置布局会出现重复设置的提示。

QWidget 与 QLayout 的关系

QWidget 是一个容器,可以包含其它可视的控件。
QLayout是一个布局,用于对容器中的子控件的排列进行管理。

posted @ 2026-01-29 23:11  奋斗的小仔  阅读(3)  评论(0)    收藏  举报