Qt 如何交换物品和间隔垫圈?

Qt 如何交换物品和间隔垫圈?,qt,alignment,visibility,Qt,Alignment,Visibility,在qt中,我有一个表单,其中包含一个 组合框 复选框 间隔棒 钮扣 基于某些逻辑,我有时想显示另一个组合框。。。间隔棒在哪里,但更小 但当我添加它时,所有内容都会自动调整大小 我看不到一种方法可以使它隐形,但当我再次使它可见时,却能保持相同大小的物品 我试着让它固定大小。。。但是,除非我对所有东西都使用固定的大小和位置,我认为这是个坏主意,否则当我改变可见性时,这些东西仍然会四处移动 看起来很傻。。。但我怎样才能让我的小组合框显示出来,而不是不在旁边的间隔框呢?间隔器似乎没有名字 我愿意 c

在qt中,我有一个表单,其中包含一个

  • 组合框
  • 复选框
  • 间隔棒
  • 钮扣 基于某些逻辑,我有时想显示另一个组合框。。。间隔棒在哪里,但更小
但当我添加它时,所有内容都会自动调整大小

我看不到一种方法可以使它隐形,但当我再次使它可见时,却能保持相同大小的物品

我试着让它固定大小。。。但是,除非我对所有东西都使用固定的大小和位置,我认为这是个坏主意,否则当我改变可见性时,这些东西仍然会四处移动

看起来很傻。。。但我怎样才能让我的小组合框显示出来,而不是不在旁边的间隔框呢?间隔器似乎没有名字

我愿意

combo.setVisible(condition);
Spacer.setVisible(!condition);

很简单。。。除了如何从代码访问间隔器之外?

我的建议是使用容器
QWidget
而不是间隔器。下面是它的外观:

A combo box
a checkbox
a widget-container
a button 
小部件容器是一个具有固定大小的
QWidget
。将您的组合框放在那里,当您显示/隐藏组合框时,它将保持其大小

关于你的问题(你不需要它,只是想在将来知道):

如何从代码访问间隔垫圈

您可以根据以下代码创建间隔符:

QSpacerItem* spacer = new QSpacerItem(0, 15, QSizePolicy::Fixed, QSizePolicy::Fixed);
layout->addItem(spacer);
...
如果您知道布局的索引,也可以从布局中获取:

QLayoutItem* item = layout->itemAt(index);

但是对于布局项没有显示/隐藏这样的方法。

请发布一个代码片段,说明如何创建小部件和间隔符并将其添加到父级/布局。表单是使用Qt Designer创建的,所以技术上我没有代码显示。。。但是感谢你的评论,我查看了设计的xml,看到了间隔名称。。。这是我之前在属性窗口中无法看到的。谢谢。这个小部件非常完美——而且不需要编码,只需5秒钟的修复:-)太棒了