以簡單的形式,我做了幾個按鈕並放置了一個水平佈局。當鼠標離開該區域時,最後一個按鈕應隱藏起來。使用按鈕 - > 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. 在Qt中保留小部件
- 3. wxPython:隱藏一個小部件並刪除剩餘空間
- 4. 隱藏Android小部件
- 5. Qt4:隱藏次要小部件,同時保持中央小部件的大小
- 6. Qt:事件隱形小部件?
- 7. 隱藏小部件的一部分?
- 8. Qt 4.8:佈局:如果沒有更多可用空間,隱藏小部件
- 9. 在QScrollArea中爲QVBoxLayout中最初隱藏的小部件預留空間
- 10. QT小部件與QT GUI
- 11. 着色「空間」小部件
- 12. Qt刪除QVBoxLayout上的小部件之間的空白空間
- 13. Qt:如何更正抓取不可見/隱藏的小部件?
- 14. Qt - 在Python中保留小部件的參考
- 15. gtk +:GtkFileChooserDialog隱藏一些小部件
- 16. 構建小部件時隱藏Javascript
- 17. 在qlayout中隱藏小部件
- 18. UserVoice小部件隱藏選項卡
- 19. 如何隱藏sharethis小部件
- 20. 顯示和隱藏小部件
- 21. Orchard CMS有條件地隱藏小部件並取消區域
- 22. Qt - 小部件 - 更新
- 23. Qt小部件4.7與5.1
- 24. fscanf QT小部件C++
- 25. Qt小部件com問題
- 26. qt - 小部件 - 定位
- 27. qt定製小部件
- 28. Qt小部件和指針
- 29. 如何使用小孩隱藏內部包裝空白空間?
- 30. Qt小部件大小限制
很好的建議,我試圖解決類似的問題,但我有兩個按鈕和一邊的進度條。當進度條不可見時,現在兩個按鈕保持正確的大小,因爲它們在對話框中居中。 – zar 2015-02-17 17:59:34