Как полностью скрыть QGridLayout? - PullRequest
9 голосов
/ 03 марта 2010

У меня есть кнопка, за которой следует QGridLayout полный виджетов. Я хочу показать / скрыть QGridLayout при каждом нажатии кнопки, но, читая документацию QGridLayout, я вижу, что реализации show() / hide() нет, также нет метода setVisible().

Как мне этого добиться?

Ответы [ 3 ]

7 голосов
/ 03 марта 2010

Макеты влияют только на размер / положение добавленных в них виджетов - для наглядности (и всего остального - обработки событий, фокусировки, включения + отключения) вы заботитесь о родительском виджете, как упоминалось выше. QLayout :: parentWidget () предоставляет вам виджет, которому принадлежит макет, который вы можете затем показать и скрыть.

6 голосов
/ 03 марта 2010

Вы не упомянули, какую версию Qt вы используете. (Я смотрю на документацию 4.4 .)

Я не пробовал это, но вот две идеи:

  • QGridLayout наследует функцию QLayoutItem::widget(). Если ваш макет является виджетом, он вернет QWidget*, для которого вы можете позвонить show() или hide().
  • Если ваш QGridLayout не является QWidget, вы можете поместить его в QWidget, и вместо этого вы можете show() / hide() этот виджет.
3 голосов
/ 03 марта 2010

Я предполагаю, что у вас есть несколько экземпляров QGridLayout, только один должен быть виден на основании нажатой кнопки Вы можете использовать QStackedWidget для этого:

Класс QStackedWidget предоставляет стек виджетов, где только один виджет видно одновременно.

Затем для каждого виджета в QStackedWidget вы должны связать отдельный QGridLayout.

Более подробную информацию смотрите в документации Qt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...