QT布局 - 初步指导

4
我是QT的新手。我试图通过实现下面看到的小窗口来理解布局机制。在QWidget主窗口下有以下元素:
  1. 一个大QWidget,覆盖整个客户区域。
  2. 窗口顶部的两个QWidget容器。两者的高度应相同,但右侧的一个会随着窗口的增长/缩小而水平拉伸。
  3. 位于右上方的一个带有固定高度和宽度的按钮容器小部件
  4. 填充其余客户区域的大QWidget容器,应随窗口调整大小而调整大小。
父窗口本身可调整大小。
我正在寻找使用哪种布局的提示。如何以编程方式实现此目标?定义什么自动拉伸,什么保持固定大小?以及如何保持比例不变。
如果您有任何指针,我将不胜感激。
2个回答

3
最简单、也是我认为最好的方法是使用QHBoxLayout和QVBoxLayout。你可以通过QtCreator中的设计师来完成,但如果需要随时间进行调整,我发现它不完美地工作。如果是一组静态小部件,我建议使用QtCreator设计师进行设计,因为它将极大地简化您的生活。
如果您要编程实现,主窗口应设置为使用QVBoxLayout,然后在此之后再添加两个子QVBoxLayout,其中底部一个配置为获取任何空间。然后在顶部QVBoxLayout中,添加一个QHBoxLayout与您的两个上部组件。

谢谢。我明白布局对象中的单个项目将自动占用该布局的整个大小。但是如果您有两个项目,如何设置区域利用率?例如,如果您想要一个固定大小,另一个可以拉伸,或者一个占40%,另一个占60%。我找不到用于此的“关键字”。无论是从API的角度还是在QT-Desitner GUI中都没有。 - JasonGenX
这是理解那个特定问题的最佳资源。它解释了许多内容,包括“sizePolicy”(按权重拉伸)。http://doc.qt.nokia.com/latest/layout.html - Wes Hardaker

3

要在代码中将小部件设置为固定大小,您需要在小部件上调用setFixedSize(int h, int w)。要在设计师中完成此操作,请单击小部件,查看QWidget部分中的属性编辑器。打开sizePolicy并将水平和/或垂直设置为fixed。然后打开Geometry并设置宽度和高度。

要使它们以不同比例拉伸,请在使用框布局时使用单独的参数。例如:layout->addWidget(button1, 1); layout->addWidget(button2, 2); 这将导致button2以button1的两倍速率扩展。要在设计师中完成此操作,请打开小部件的sizePolicy属性,并设置HorizontalStrech和/或VerticalSretch。请注意,在这种情况下,对于您想要设置拉伸的方向,大小策略不能是固定的。另外,它永远不会让小部件缩小到其最小尺寸以下(它宁愿破坏比例也不会使某些东西缩小得太小)。


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