Qt QHboxLayout单元大小问题

Qt QHboxLayout单元大小问题,qt,layout,qwidget,Qt,Layout,Qwidget,对于那些没有读过我的Qt问答的人,我正在为一个项目学习Qt。我在GUI设计方面的经验非常有限,而在Qt方面的经验则不多 我有一个水平布局,我想填充一些按钮。我可以把这些按钮放得很好,但我以前的方形按钮是水平拉伸的,以占据更多的空间 我想让布局管理器确定这些按钮的最佳大小,但我也希望它们的原始比例保持不变。例如,如果我从32X32按钮开始,这些按钮需要收缩以适应布局中的所有按钮,我希望它们按比例收缩,以便保持“宽度到高度”比例。20X20、16X16、12X12都可以,但24X16是不可接受的尺寸

对于那些没有读过我的Qt问答的人,我正在为一个项目学习Qt。我在GUI设计方面的经验非常有限,而在Qt方面的经验则不多

我有一个水平布局,我想填充一些按钮。我可以把这些按钮放得很好,但我以前的方形按钮是水平拉伸的,以占据更多的空间

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

我在按钮和拉伸选项上修改了尺寸策略。即使在阅读了QPushButton和QHboxLayout类之后,我也不知道如何做到这一点。它是如何实现的


谢谢。

只要我正确理解这个问题,我想你想要的是
QBoxLayout::addStretch()
。这将添加一个填充未使用空间的间隔对象。因此,按钮将有其理想的大小和间隔将填补其余。您可以尝试在Designer中进行试验,这比编写/编译/运行周期更简单。

您应该看看这些问题的答案。这是我在这里的回答的摘要

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

完成后,您可以使用与小部件相同的方式将布局项添加到布局中。因此,当添加按钮时,将其更改为使用自定义布局项类


我还没有实际测试过这些,所以这是一个理论上的解决方案。如果需要的话,我不知道如何通过designer实现此解决方案。

我实际上通过使用QToolButton获得了所需的行为,这基本上就是我想要的,但这个答案似乎是未来的发展方向。谢谢。这为我解决了“确定/取消”按钮左侧的“再次显示”复选框等问题:self.horizontalLayout.addWidget(self.checkbox)self.horizontalLayout.addStretch()self.horizontalLayout.addWidget(self.buttonBox)经过相当长的时间后,我对Qt做了更多的工作,这肯定是一个更好的解决方案。这个问题今天引起了我的注意,因为它现在是一个“流行问题”,所以我有机会回顾一下,并改变我对你答案的接受。