Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt4] Как удалить Layout


Автор: dix75 23.5.2010, 10:27
Добрый день!

Возникла ситуация при которой необходимо динамически менять GUI интерфейс для некоторого компонета.
реализовал так:
- при нажатие на кнопку на форму добавляется лайоут и соответсвующий интерфейс.
- при нажатие на другую кнопку автоматически этот интерфейс должен уничтожаться и создаваться новый другой.

Но как удалить этот интерфейс имея только указатель на виджет содержащий лайаут? 

Автор: Дшпыук 23.5.2010, 10:55
Нужно именно уничтожать?.. Может можно просто скрыть?... Делай кнопку chekcable и по состоянию (включена\выключена) устанавливай видимость лайоута.
Почитай " Qt 4 GUI программирование на C++" ( Jasmin Blanchette & Mark Summerfield) там был такой пример... 

Автор: dix75 23.5.2010, 11:20
Нет именно удалить.
Скрывать не получается т.к. при добавлении нового лайаута программа ругается, и указывает на то что уже оди лайаут есть

Автор: djamshud 23.5.2010, 11:25
Если лайот установлен как основной (top-level) для виджета, то Qwidget::layout().

Автор: dix75 24.5.2010, 09:16
Пробовал я его удалять

Код

delete Qwidget::layout()


Но он все равно не удаляется


Автор: djamshud 24.5.2010, 12:41
Он то удаляется. А элементы в нем - нет. Их нужно скрыть (и удалить?). И точно ли это тот самый лайот?

Когда мне нужно на одном виджете иметь возможность показывать разное содержимое, я организую на нем один лайот, в который напихиваю все необходимые "страницы", которые потом и показываю методом "скрыть все виджеты из лайота, показать нужный". Для удобства организовал эту куралесицу в класс. Если нужно, могу дать исходник.

Автор: borisbn 24.5.2010, 14:39
А http://doc.qt.nokia.com/4.6/qstackedlayout.html или http://doc.qt.nokia.com/4.6/qstackedwidget.html тебя не устроит ?

Автор: dix75 6.6.2010, 08:54
Цитата(djamshud @  24.5.2010,  12:41 Найти цитируемый пост)
Он то удаляется. А элементы в нем - нет


Вряд ли. Ведь я использую лайоут как родителя для всех виджетов размещенных на нем.

Цитата(djamshud @  24.5.2010,  12:41 Найти цитируемый пост)
Когда мне нужно на одном виджете иметь возможность показывать разное содержимое, я организую на нем один лайот, в который напихиваю все необходимые "страницы", которые потом и показываю методом "скрыть все виджеты из лайота, показать нужный". Для удобства организовал эту куралесицу в класс. Если нужно, могу дать исходник.

Такой прием будет необходим, когда небольшое кол-во страниц.
 У меня их более 50 и пользователь может посмотреть только одну.
И создавать все 50 страниц крайне неразумно и по времени и по ресурсам.
Проще удалить и созать новую заново.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)