文档中没有很清楚的解释,但是当我调用QBoxLayout::insertWidget时,实际上会发生什么?它会分配一个QLayoutItem,以某种方式将其与小部件相关联,然后将QLayoutItem添加到布局中?为什么需要这样的间接性?我正在制作自定义布局,并希望能够在该布局的任何索引处插入小部件,但我并不完全了解其中的机制。
由于布局操作的是布局项而不是小部件。 QLayoutItem 包含了自己的一系列函数,用于将布局项定位到布局中,并适当地调整大小/对齐。举个简单的例子:您有一个垂直布局,宽度为 300 像素。这意味着您添加的每个布局项也将是 300 像素宽。现在想象一下在其中添加一个 50x50 的小部件。由于布局具有自己的几何形状、sizeHint 和其他内容,因此您将能够正确地插入小部件(布局项保持 300 像素宽,小部件保持 50 像素宽,没有任何损坏),如果直接操作小部件,这将是困难的/不可能的。
QLayoutItem
只是布局使用的数据结构,用于表示最终出现在布局中的各种对象 - 小部件并不是唯一的对象,即使是小部件,布局仍然需要自己的结构来表示它们。感谢这个实现细节被暴露出来,否则就会更加困难。 - Kuba hasn't forgotten Monica