Мне следовал за кнопкой a QGridLayout
полный виджетов. Я хочу показать/скрыть QGridLayout
при каждом нажатии кнопки, но чтении документации QGridLayout
Я вижу, что существует нет show()
/hide()
реализация, также нет setVisible()
доступный метод.
Как я достигаю этого?
Вы не упомянули, какую версию Qt вы используете. (Я смотрю документацию по 4.4.)
Я не пробовал, но вот две идеи:
QGridLayout
наследует функцию QLayoutItem::widget()
. Если ваш макет является виджетом, эта функция вернет QWidget*
, на котором вы можете вызвать show()
или hide()
. QGridLayout
не является QWidget
, вы можете вложить его в QWidget
, и вы можете show()
/ hide()
этот виджет вместо него. Я предполагаю, что у вас несколько QGridLayout
, только один должен быть видимым в зависимости от нажатой кнопки. Для этого можно использовать QStackedWidget
:
Класс QStackedWidget предоставляет стек виджетов , в котором одновременно виден только один виджет .
Затем для каждого виджета в QStackedWidget
вы должны связать отдельный QGridLayout
.
См. документацию Qt для получения более подробной информации
Макеты влияют только на размер/положение добавленных к ним виджетов - для видимости (и всего остального - обработка событий, фокус, включение/выключение) вам нужен родительский виджет, как упоминалось выше. QLayout::parentWidget() дает вам виджет, которому принадлежит макет, который вы можете показывать и скрывать.