在Qt中将一个小部件与另一个小部件交换

Rob*_*b H 6 c++ layout qt widget

QGraphicsWidget在现有视图中"交换" 彼此的最佳方式是什么?我有一个树视图小部件和一个标签小部件,我希望它们在不同的时间占用相同的空间.具体来说,当出现错误时,我想在标签中显示它,当没有错误时,我想显示树.

我曾尝试编程隐藏一个并显示与其他hide()show(),但问题是,隐性窗口小部件占用空间,我QGraphicsLinearLayout即使它是隐藏的,留下一个空的差距.另外,我想我可以添加和删除布局中的小部件,但似乎笨拙,因为它意味着一个变化在小部件的所有权,我需要记录在布局自己的位置,所以我可以将其插入回正确的地方.

在Java Swing中,我使用a CardLayout来实现这一点,但我没有看到Qt中的等价物.

更新:我发现了QStackedWidget.但是,我正在使用a QGraphicsScene,因此我的小部件不会继承QWidget而是QGraphicsWidget,所以我无法将它们添加到QStackedWidget.

Pat*_*ola 0

当您将 QWidget 添加到布局时,布局的所有者将不会获得您的小部件的所有权。您必须将您的小部件添加为其他 QWidget 的子部件(通常在子部件的构造函数中传递父部件)。

因此,从布局中删除小部件只会将其从布局所有者的显示行为中删除。

在您的情况下,您可以从布局中删除小部件并将其隐藏。如果您想再次显示它,请显示它并将小部件添加到布局中。要将其插入正确的位置,您必须在移除它时保存它的位置。

希望有帮助

  • 您对布局中小部件的所有权有点错误 - 当通过 setLayout 方法在小部件上安装布局时,所有子项都会自动重新设置父级。因此,您不需要为子小部件指定父级。 (2认同)