2010-03-03 154 views
9

我有一個按鈕後面跟着一個QGridLayout裝滿了小部件。 我想在每個按鈕點擊時顯示/隱藏QGridLayout,但閱讀QGridLayout文檔我看沒有show()/hide()實現,也沒有setVisible()方法可用。如何完全隱藏QGridLayout?

我該如何做到這一點?

回答

6

你沒有提到你使用的是哪個版本的Qt。 (我看4.4 documentation

我沒有試過,但這裏有兩個想法:

  • QGridLayout繼承功能QLayoutItem::widget()。如果你的佈局是一個小部件,這將返回一個QWidget*,你可以撥打show()hide()
  • 如果您的QGridLayout不是QWidget,則可以將其嵌套在QWidget之內,並且您可以使用該小部件代替。
+0

我使用4.6.1見Qt documentation,我已經嘗試過,窗口小部件() - >隱藏()方法,但扔段故障。也許我錯了 – 2010-03-03 14:11:49

+1

@clinisbut:你測試了widget()的結果來看它是否有效嗎?它可能會返回'NULL' /'0'。 – Bill 2010-03-03 14:57:27

7

佈局僅影響添加到其中的小部件的大小/位置 - 對於可見性(以及其他任何事件處理,焦點,啓用+禁用),您關心父小部件,如上所述。 QLayout :: parentWidget()爲您提供擁有佈局的小部件,然後您可以顯示和隱藏它。

+0

所以你建議將qlayout包裝在qwidget中以便能夠隱藏/顯示()不是嗎? – 2010-03-03 15:09:05

+0

感謝您瞭解Layouts如何工作的說明。我之前沒有用過它們,所以我只是根據文檔猜測。 – Bill 2010-03-03 15:50:57

3

我假設你有多個QGridLayout實例,根據點擊的按鈕只能看到一個實例。您可以使用此一QStackedWidget

的QStackedWidget類提供了一個 堆部件的只有一個小部件 可見在同一時間。

然後,對於QStackedWidget中的每個小工具,您應該關聯一個單獨的QGridLayout

更多細節