Qt 确定布局的大小

Qt 确定布局的大小,qt,qt4,Qt,Qt4,是否有办法使layoutStretch属性始终得到遵守?例如,我将其设置为“1,3,2”,但随后第一部分中的小部件(标签)(“1,3,2”中的“1”)展开(当添加更多文本时),然后不再遵守1:3:2的比例。也就是说,“1:3:2”的比例变成了更像“3:1:3”的比例。你应该看看这个属性。它控制布局在更新几何图形时如何尊重其子级的sizeHint() 因此,您需要做的是:通过将三个子小部件的水平大小策略设置为QSizePolicy::Ignored,使布局忽略子小部件的水平大小点: QLabel

是否有办法使layoutStretch属性始终得到遵守?例如,我将其设置为“1,3,2”,但随后第一部分中的小部件(标签)(“1,3,2”中的“1”)展开(当添加更多文本时),然后不再遵守1:3:2的比例。也就是说,“1:3:2”的比例变成了更像“3:1:3”的比例。

你应该看看这个属性。它控制布局在更新几何图形时如何尊重其子级的
sizeHint()

因此,您需要做的是:通过将三个子小部件的水平大小策略设置为
QSizePolicy::Ignored
,使布局忽略子小部件的水平大小点:

QLabel *label = ...;
...
label->setSizePolicy(QSizePolicy::Ignored, label->sizePolicy().verticalPolicy());
(第二个参数将确保此语句不会更改垂直策略。 当然,您应该设置每个子窗口小部件的大小策略,此示例代码仅用于标签。)

请注意,布局的内容必须是小部件;我认为嵌套布局不能指定大小策略(但我可能错了)。至少使用QtDesigner,无法将大小策略应用于布局本身(如果它不是小部件的布局)。有关详细信息,请参见注释


在QtDesigner中,您可以如下设置子小部件的sizePolicy:

之前:

收缩:

选择布局中的项目:

将水平大小策略设置为“忽略”:

结果:

在QtDesigner中,我单击了三个垂直布局小部件中的一个,它们是horizontalLayout小部件中的三个对象(具有1:3:2布局拉伸的那个)。但是,没有大小策略,只有layoutLeftMargin、layoutTopMargin、layoutRightMargin、layoutBottomMargin、layoutSpacing、layoutStretch和layoutSizeConstraint。@DavidDoria我为QtDesigner添加了屏幕截图。对不起,我想我还是不清楚。我有垂直布局小部件,它们是水平布局小部件的子部件。这些verticalLayout小部件是我想要固定比率的小部件,但它们没有“sizePolicy”属性。啊,好吧,那么你应该将垂直布局(不是小部件!)的内容放入真正的小部件中,将布局设置为垂直。然后将这个小部件(现在它是一个小部件!)放入水平布局/外部小部件。最后,将最近创建的小部件(应用垂直布局的地方)的水平大小策略设置为“忽略”。问题在于,您无法设置布局项的大小策略(如果它不是小部件;在QtCreator中,您会看到一个红色边框),但您可以设置具有布局的小部件的大小策略。我希望你明白我的意思;我知道,这可能令人困惑;)啊,好的。在几乎每一个程序中,我都有这样嵌套的布局——我应该总是用指定的布局而不是原始的“布局”使它们成为小部件吗?