• 起因:
    项目某页面的布局,之前都是用 绝对位置 去布局的。后来 需求各控件的位置需要随着某一控件的隐藏和显示去变化 ,这就很不方便,需要各种根据高度和显示状态去计算控件坐标并更新。
    随着需求的增加,绝对位置已经满足不了各种能够变化,问题频出。
    所以 需要layout作为容器,容纳控件 ,以适应各控件的位置动态变化。
    -问题如下图所示:
    预期效果和实际效果
    控件2高度变化之后竟然和其他 控件重叠 了。
    造成了很大的困扰。

在这里插入图片描述
简而言之,言而简之,我的layout所在主窗口的大小是固定不变的,layout的中的控件的大小策略决定了layout的大小。
因为我 layout中的某些控件是设定了最大最小值和大小策略 的。

最后添加如下代码:

m_mainLayout->setSizeConstraint(QLayout::SetFixedSize);

完美解决。
当然遇到这种问题的其他人也可能需要使用其他的大小约束。

目录问题描述问题原因解决方案问题描述起因: 项目某页面的布局,之前都是用绝对位置去布局的。后来需求各控件的位置需要随着某一控件的隐藏和显示去变化,这就很不方便,需要各种根据高度和显示状态去计算控件坐标并更新。 随着需求的增加,绝对位置已经满足不了各种能够变化,问题频出。 所以需要layout作为容器,容纳控件,以适应各控件的位置动态变化。-问题如下图所示:控件2高度变化之后竟然和其他控件重叠了。造成了很大的困扰。问题原因简而言之,言而简之,我的layout所在主窗口的大小是固定不
Qt widgets-基本控件使用示例,不使用控件拖动,采用代码layout完成控件排布。 BasicLayout Basic Layouts shows how to use the standard layout managers that are available in Qt: QBoxLayout, QGridLayout, and QFormLayout. The QBoxLayout class lines up widgets horizontally or vertically. QHBoxLayout and QVBoxLayout are convenience subclasses of QBoxLayout. QGridLayout lays out widgets in cells by dividing the available space into rows and columns. QFormLayout, on the other hand, sets its children in a two-column form with labels in the left column and input fields in the right column.
Qt的基本布局有水平布局QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)、表单布局(QFormLayout)等。QGridWidget作为一个类似网格布局的窗口容器,将加入到容器的窗口按照网格布局方式排列,根据窗口的数量自动计算行数与列数。与网格布局的不同之处在于,网格布局的某个单元格的窗口暂时隐藏之后,空余出来的空间不会被同一行的其他窗口延伸利用,QGridWidget实现了某个网格暂时隐藏之后,同一行的其他窗口会重新分配横向上占用的空间,自动延伸,从而实现尽可能占用更多空间的功能。 QGridWidget与QBoxWidget的功能基本类似,主要区别有两点: 1.QGridWidget的布局容器由QSplitter来实现,QBoxWidget的布局容器由水平布局QHBoxLayout)和垂直布局(QVBoxLayout)组合实现。 QGridWidget能够拖动调整单元格的占比,并能够自动记忆与恢复,也可以恢复统一的默认占比。
问题的提出 在Qt的GUI布局,有时候需要彻底删除一个部件,释放其占用的内存,比如在一个网格布局,在不影响布局的情况下,需要删除其的某个部件,我们调用removeWidget()函数将其从布局删除,这种操作下,虽然在界面上看不到了被移除的部件,但这并不说明,部件已经被删除,所占用的内存已经被释放。实际上,这些部件并没有被删除,占用的内存并没有释放。在Python里,可以采用以下三种方法来达到目的。 方法1:使用部件的deleteLater的函数 在Qt,所有继承自QObject的类都有一个d
可以使用 Qt 布局管理器来布置界面的不同部分。 Qt 提供了五种布局管理器,分别是 QHBoxLayout、QVBoxLayout、QGridLayout、QFormLayout 和 QStackedLayoutQHBoxLayout 是横向布局管理器,可以让你在水平方向上排列控件。QVBoxLayout 是纵向布局管理器,可以让你在垂直方向上排列控件。QGridLayout 是网格布局管理器,可以让你在网格摆放控件。QFormLayout 是表单布局管理器,可以让你以标签/控件的方式摆放控件。QStackedLayout 是堆叠布局管理器,可以让你在同一个位置上堆叠多个控件,并通过当前索引来决定显示哪一个控件。 举个例子,如果你想要在界面上左右分割成两个部分,可以使用 QHBoxLayout 把这两个部分水平排列起来。如果你想要在界面上上下分割成两个部分,可以使用 QVBoxLayout 把这两个部分垂直排列起来。