【问题标题】:QT Layout - initial directionsQT 布局 - 初始方向
【发布时间】:2011-06-19 10:18:58
【问题描述】:

我是 QT 的新手。我试图通过实现下面看到的这个小窗口来理解布局机制。它在作为主窗口的 QWidget 下具有以下元素:

  1. 一个大的 QWidget 延伸到所有客户区。
  2. 窗口顶部有两个 QWidget 容器。两者应具有相同的高度,但右侧的高度会随着窗口的增大/缩小而水平延伸。
  3. 右上角的一个按钮容器小部件,具有固定的高度和宽度
  4. 大型 QWidget 容器填充了客户区的其余部分,应随着窗口大小的调整而调整大小。

父窗口本身是可调整大小的。

我正在寻找关于我应该使用哪种布局的提示。我如何以编程方式实现这一目标?定义什么会自动拉伸,什么会保持固定大小?以及如何将比例保持在需要保持的位置。

如果您有任何指点,我将不胜感激。

【问题讨论】:

    标签: qt


    【解决方案1】:

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

    为了使它们在代码中以不同的比例拉伸,您在使用框布局时使用单独的参数。例如 layout->addWidget( button1, 1 );布局->addWidget (button2, 2);这将导致 button2 以两倍于 button1 的速度扩展。要在设计器中执行此操作,请打开小部件的 sizePolicy 属性并设置 Horizo​​ntalStrech 和/或 VerticalSretch。请注意,在这种情况下,对于要设置拉伸的方向,大小策略不需要固定。此外,它永远不会让小部件缩小到其最小尺寸以下(它宁愿弄乱比例也不愿缩小太小的东西)。

    【讨论】:

      【解决方案2】:

      最简单,恕我直言,最好的方法是通过 QHBoxLayout 和 QVBoxLayouts。您可以通过 QtCreator 中的设计器来完成此操作,但我发现如果您需要随着时间的推移进行调整,它就无法完美运行。如果它是一组静态小部件,我建议使用 QtCreator 设计器来设计它,因为它会大大简化您的生活。

      如果您要以编程方式执行此操作,则应将主窗口设置为使用 QVBoxLayout,然后设置两个子 QVBoxLayout,其中底部的窗口配置为占用它可以获得的任何空间。然后在顶部的 QVBoxLayout 中,添加一个 QHBoxLayout 与您的两个上部组件。

      【讨论】:

      • 谢谢。我确实理解布局对象中的单个项目将自动占据该布局的整个大小。你如何设置两个项目的面积利用率?假设你想要一个固定而另一个可拉伸,或者一个 40% 和另一个 60%。我找不到用于此的“关键字”。不是从 API 的角度来看,甚至在 QT-Desitner GUI 中也是如此。
      • 这是理解特定问题的最佳资源。它解释了很多事情,包括“sizePolicy”(按重量拉伸)。 doc.qt.nokia.com/latest/layout.html
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多