Qt布局管理器中QLayoutItem和QWidget之间的关系

3

文档中没有很清楚的解释,但是当我调用QBoxLayout::insertWidget时,实际上会发生什么?它会分配一个QLayoutItem,以某种方式将其与小部件相关联,然后将QLayoutItem添加到布局中?为什么需要这样的间接性?我正在制作自定义布局,并希望能够在该布局的任何索引处插入小部件,但我并不完全了解其中的机制。


为什么不直接查看Qt源代码呢? - Victor Polevoy
我只有头文件,源文件已经编译了? - ulak blade
有没有在线浏览的方式?在浏览http://code.qt.io的存储库时,我经常遇到“无效提交引用”错误。 - ulak blade
http://code.woboq.org/qt5/ - Arun
没有间接引用,QLayoutItem只是布局使用的数据结构,用于表示最终出现在布局中的各种对象 - 小部件并不是唯一的对象,即使是小部件,布局仍然需要自己的结构来表示它们。感谢这个实现细节被暴露出来,否则就会更加困难。 - Kuba hasn't forgotten Monica
1个回答

5
由于布局操作的是布局项而不是小部件。 QLayoutItem 包含了自己的一系列函数,用于将布局项定位到布局中,并适当地调整大小/对齐。
举个简单的例子:您有一个垂直布局,宽度为 300 像素。这意味着您添加的每个布局项也将是 300 像素宽。现在想象一下在其中添加一个 50x50 的小部件。由于布局具有自己的几何形状、sizeHint 和其他内容,因此您将能够正确地插入小部件(布局项保持 300 像素宽,小部件保持 50 像素宽,没有任何损坏),如果直接操作小部件,这将是困难的/不可能的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接