2009-12-09 173 views
13

以简单的形式,我做了几个按钮并放置了一个水平布局。当鼠标离开该区域时,最后一个按钮应隐藏起来。使用按钮 - > hide()它可以工作,但所有按钮都由布局管理器重新排列。我想要的是所有其他按钮都继续保持其位置。我尝试用小部件占位符替换小部件,并交换按钮和占位符hide()/ show(),调用placeholder-> resize(button-> size()),但布局管理器不重视调整大小和占位符以其最小尺寸设置。删除小部件并保留其空间的最佳方式是什么?隐藏Qt小部件并保留小部件空间

回答

-1

我不知道是否是最好的方法,但解决了这个使用QStackedWidget来包装按钮。

0

您可以尝试将按钮隐藏在另一个窗口小部件中,并尝试使其他窗口小部件在隐藏按钮时保持其大小。这可能有点困难。一个QStackedWidget已经被提出,并且可能是要走的路......它将与QWidget包装类似,除了大小调整可能更容易。

您可以看到的另一个选项是插入占位符的间隔符,并将间隔符设置为按钮大小的固定大小。 (当按钮大小改变时,您需要更新大小)。你应该能够显示/隐藏这些成对的组合,并使它像你期望的那样工作。

0

尝试把你想隐藏和取消隐藏在另一个布局中的按钮。在该布局中,随着按钮放置一个间隔。呼叫按钮隐藏和间隔将接管。间隔接管隐藏按钮的空间。其他按钮继续占用相同的空间。

0

一个简单的方法是设置占位符小部件的miminum大小,而不是调整它的大小。虽然小部件的大小不受布局的尊重,但最小大小为。

2

我有同样的问题。

我最终添加了一个Horizo​​ntalSpacer(我的布局是水平的),我最初设置为0尺寸和固定尺寸策略。然后我用:

if (button_is_shown) 
    ui.horizontalSpacer->changeSize(0,0, QSizePolicy::Fixed, QSizePolicy::Fixed); 
else 
    ui.horizontalSpacer->changeSize(1,1, QSizePolicy::Expanding, QSizePolicy::Fixed); 

填写空格。同样,您可以调整间隔符的大小到按钮的大小,并保持为固定QSizePolicy。

0

可能最简单的方法是将按钮的最大尺寸设置为其尺寸提示。

button->setMaximumSize(button->sizeHint()); 

这应该使可见按钮保持相同的大小,并且不会在隐藏另一个按钮时强制它们展开。你需要注意的是,如果你改变了按钮上的文字,你重置了它们的最大尺寸,但你可能只在一个地方做到这一点。我相信类似这样的东西是在Qt书的早期章节中完成的(但是我没有把它放在我面前,所以我不能指出你在正确的地方)。

+0

很好的建议,我试图解决类似的问题,但我有两个按钮和一边的进度条。当进度条不可见时,现在两个按钮保持正确的大小,因为它们在对话框中居中。 – zar 2015-02-17 17:59:34

6

尝试嵌入你的widget成2页一QStackWidget: *您一个页面 *另一个空页

设置当前qstackwidget页面,当你想隐藏你的插件的空页上的小窗口。并将其设置回主页以显示您的小部件。