使用Qt隐藏元素

时间:2013-03-01 16:07:55

标签: c++ qt qlayout

我试图使用c ++在Qt界面程序中隐藏QDoubleSpinBox。

我找到了函数hide(),但它没有按照我的预期工作,因为当我隐藏元素时,它曾经占用的空间没有被考虑在内,所以我的所有窗口都变得疯狂了。我想知道是否有任何隐藏功能并保持空间占用,就像它是正常的一样。我认为这可能是一个像这样的函数,因为在其他框架甚至JavaScript中很常见。

如果没有...任何解决方案?

3 个答案:

答案 0 :(得分:3)

这是因为布局。添加/删除或显示/隐藏元素时,布局会自动重新计算。您可以选择不使用布局。

答案 1 :(得分:2)

您可能还想尝试将不透明度设置为0.0,而不是隐藏QDoubleSpinBox。

mySpinBox.setWindowOpacity(0.0);

实际上我认为这不会起作用。

我能想到的最简单的事情就是将QDoubleSpinBox子类化,然后使用自己的变量覆盖绘制函数(可能还有鼠标处理)。

答案 2 :(得分:0)

一个相当快但不优雅的解决方案是子类化所需的小部件,添加一个额外的bool以使小部件不可见而不移除其几何体和切换它的方法,并且在重载的paint事件中,如果bool是true,从基类调用原始paint事件,否则不绘制任何东西。这将导致一个完全透明的小部件仍然接受事件,这就是为什么你也可以使用setEnabled()和bool一起隐藏它时禁用它。

当您想要隐藏和显示许多对象时不太适用,但在一两个对象的情况下,它可以正常工作并且很快实现。