【问题标题】:Qt QHboxLayout cell size ssuesQt QHboxLayout 单元格大小问题
【发布时间】:2010-12-13 23:06:32
【问题描述】:

对于那些还没有阅读我的 Qt 问题的人,我正在为一个项目学习 Qt。我在 GUI 设计方面的经验很有限,在 Qt 方面没有。

我有一个水平布局,我想用一些按钮来填充。我可以很好地输入这些按钮,但是我以前的方形按钮被水平拉伸以占用更多空间。

我想让布局管理器确定调整这些按钮大小的最佳方式,但我也希望它们的原始比例保持不变。例如,如果我从 32X32 按钮开始,这些按钮需要缩小以适应布局中的所有按钮,我希望它们按比例缩小,以便保持宽度到高度的比例。 20X20、16X16、12X12 都可以,但 24X16 是不可接受的尺寸示例。

我已经修改了按钮和拉伸选项的尺寸政策。即使在阅读了 QPushButton 和 QHboxLayout 类之后,我也没有看到如何执行此操作。它是如何实现的?

谢谢。

【问题讨论】:

    标签: qt layout qwidget


    【解决方案1】:

    只要我正确理解问题,我想你想要的是QBoxLayout::addStretch()。这将添加一个填充未使用空间的间隔对象。因此按钮将具有理想的尺寸,而垫片将填充其余部分。您可以尝试在 Designer 中进行试验,它比编写/编译/运行周期更容易。

    【讨论】:

    • 这为我解决了确定/取消按钮左侧的“再次显示”复选框等问题: self.horizo​​ntalLayout.addWidget(self.checkBox) self.horizo​​ntalLayout.addStretch() self.horizo​​ntalLayout .addWidget(self.buttonBox)
    • 经过相当长的一段时间后,我用 Qt 做了更多的事情,这绝对是一个更好的解决方案。这个问题今天引起了我的注意,因为它现在是一个“热门问题”,所以我有机会审查它并改变我对你的回答的接受。
    【解决方案2】:

    你应该看看this question 的答案。这是我在那里的回答的回顾。

    您需要创建 QLayoutItem 的自定义派生类,它会覆盖 bool hasHeightForWidth()int heightForWidth( int width ) 以保持纵横比。您可以将按钮传入并查询它,也可以直接设置比率。您还需要确保 widget() 函数返回指向正确按钮的指针。

    完成后,您可以像添加小部件一样将布局项添加到布局中。因此,当您的按钮被添加时,请将其更改为使用您的自定义布局项类。

    我还没有实际测试过这些,所以目前这是一个理论上的解决方案。如果需要的话,我不知道有什么方法可以通过设计器来解决这个问题。

    【讨论】:

    • 我实际上是通过使用 QToolButton 获得了所需的行为,这基本上是我想要的,但这个答案看起来是未来的方式。谢谢。
    猜你喜欢
    • 2011-09-20
    • 1970-01-01
    • 2016-02-29
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多