2009-12-09 67 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頁面,當你想隱藏你的插件的空頁上的小窗口。並將其設置回主頁以顯示您的小部件。