以简单的形式,我做了几个按钮并放置了一个水平布局。当鼠标离开该区域时,最后一个按钮应隐藏起来。使用按钮 - > hide()它可以工作,但所有按钮都由布局管理器重新排列。我想要的是所有其他按钮都继续保持其位置。我尝试用小部件占位符替换小部件,并交换按钮和占位符hide()/ show(),调用placeholder-> resize(button-> size()),但布局管理器不重视调整大小和占位符以其最小尺寸设置。删除小部件并保留其空间的最佳方式是什么?隐藏Qt小部件并保留小部件空间
回答
我不知道是否是最好的方法,但解决了这个使用QStackedWidget来包装按钮。
您可以尝试将按钮隐藏在另一个窗口小部件中,并尝试使其他窗口小部件在隐藏按钮时保持其大小。这可能有点困难。一个QStackedWidget已经被提出,并且可能是要走的路......它将与QWidget包装类似,除了大小调整可能更容易。
您可以看到的另一个选项是插入占位符的间隔符,并将间隔符设置为按钮大小的固定大小。 (当按钮大小改变时,您需要更新大小)。你应该能够显示/隐藏这些成对的组合,并使它像你期望的那样工作。
我也会尝试安装覆盖原始绘画事件,绘制透明背景的事件过滤器,并忽略小部件在不可见时可能无法响应的大部分事件(可能全部都是,除QResizeEvent
之外)。当小部件再次可见时,移除事件过滤器。
请参阅QObject::installEventFilter(QObject*)
和QObject::removeEventFilter(QObject*)
。
尝试把你想隐藏和取消隐藏在另一个布局中的按钮。在该布局中,随着按钮放置一个间隔。呼叫按钮隐藏和间隔将接管。间隔接管隐藏按钮的空间。其他按钮继续占用相同的空间。
一个简单的方法是设置占位符小部件的miminum大小,而不是调整它的大小。虽然小部件的大小不受布局的尊重,但最小大小为。
我有同样的问题。
我最终添加了一个HorizontalSpacer(我的布局是水平的),我最初设置为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。
可能最简单的方法是将按钮的最大尺寸设置为其尺寸提示。
button->setMaximumSize(button->sizeHint());
这应该使可见按钮保持相同的大小,并且不会在隐藏另一个按钮时强制它们展开。你需要注意的是,如果你改变了按钮上的文字,你重置了它们的最大尺寸,但你可能只在一个地方做到这一点。我相信类似这样的东西是在Qt书的早期章节中完成的(但是我没有把它放在我面前,所以我不能指出你在正确的地方)。
尝试嵌入你的widget成2页一QStackWidget: *您一个页面 *另一个空页
设置当前qstackwidget页面,当你想隐藏你的插件的空页上的小窗口。并将其设置回主页以显示您的小部件。
在Qt 5.2,可以做到以下几点:
QSizePolicy sp_retain = widget->sizePolicy();
sp_retain.setRetainSizeWhenHidden(true);
widget->setSizePolicy(sp_retain);
我刚才这里张贴相同的解决方案:
How to make a Qt widget invisible without changing the position of the other Qt widgets?
(这似乎是这个问题的副本) 。
- 1. GTK +/C避免保留GtkGrid内隐藏小部件的空间
- 2. wxPython:隐藏一个小部件并删除剩余空间
- 3. Qt:事件隐形小部件?
- 4. 在QScrollArea中为QVBoxLayout中最初隐藏的小部件预留空间
- 5. 着色“空间”小部件
- 6. Qt删除QVBoxLayout上的小部件之间的空白空间
- 7. Qt:如何更正抓取不可见/隐藏的小部件?
- 8. 在qlayout中隐藏小部件
- 9. gtk +:GtkFileChooserDialog隐藏一些小部件
- 10. UserVoice小部件隐藏选项卡
- 11. 显示和隐藏小部件
- 12. Qt - 在Python中保留小部件的参考
- 13. Qt小部件和指针
- 14. fscanf QT小部件C++
- 15. qt - 小部件 - 定位
- 16. Qt小部件com问题
- 17. Qt - 小部件 - 更新
- 18. 如何使用小孩隐藏内部包装空白空间?
- 19. Qt QPropertyAnimation为布局中的小部件 - 小部件摇晃
- 20. Qt设计器(创建者)小部件框像小部件
- 21. QT在其他小部件中插入小部件
- 22. Qt抓取小部件并保存图像
- 23. 移除删除qt小部件的空间
- 24. Kendo通知小部件隐藏并显示多次
- 25. Qt显示/隐藏部件动画
- 26. Android小部件中的多余空间
- 27. Qt事件,当小部件不见了
- 28. NestedScrollView在CoordinatorLayout中隐藏底部小部件
- 29. 如何在QT中的另一个小部件内部部件?
- 30. Qt:如何强制隐藏的小部件来计算其布局?
很好的建议,我试图解决类似的问题,但我有两个按钮和一边的进度条。当进度条不可见时,现在两个按钮保持正确的大小,因为它们在对话框中居中。 – zar 2015-02-17 17:59:34