Название: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: mitrich от Декабрь 25, 2014, 15:47 Создаю QGridLayout, располагаю в нем QTabBar-ы по бокам и виджет в центре. Центральный виджет надо будет иногда заменять: вызываю QLayout::replaceWidget и после этого левый и верхний QTabBar-ы перестают реагировать на клики мышью.
Код
Пробовал вместо QGridLayout использовать QVBoxLayout + QHBoxLayout - результат точно такой же. Qt 5.3.1, Windows(MinGW) Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: __Heaven__ от Декабрь 25, 2014, 16:27 Код
Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: mitrich от Декабрь 25, 2014, 16:51 Спасибо, работает. Надо было мне внимательнее доки читать:
Цитировать The returned layout item is no longer owned by the layout and should be either deleted or inserted to another layout. The widget from is no longer managed by the layout and may need to be deleted or hidden. The parent of widget from is left unchanged. Правда, я также обнаружил, что метод replaceWidget появился только в Qt 5.2, так что скорее всего, если нужна будет поддержка Qt 4, всё равно придется каждый раз новый Layout создавать. Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: __Heaven__ от Декабрь 25, 2014, 17:00 QLayout::removeWidget
Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: GreatSnake от Декабрь 25, 2014, 17:00 Правда, я также обнаружил, что метод replaceWidget появился только в Qt 5.2, так что скорее всего, если нужна будет поддержка Qt 4, всё равно придется каждый раз новый Layout создавать. Зачем, коли есть takeAt() & addItem() ?Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: mitrich от Декабрь 25, 2014, 17:22 Опять всё нужное пропустил :)
Спасибо ещё раз, теперь всё как надо. Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: __Heaven__ от Декабрь 25, 2014, 17:55 Зачем, коли есть takeAt() & addItem() ? Не разобрался, как это работает. Не сложно будет пояснить?Название: Re: После вызова QLayout::replaceWidget перестают работать сосседние виджеты Отправлено: GreatSnake от Декабрь 25, 2014, 18:02 takeAt() возвращает отвязанный от лэйаут айтем, который потом можно вставить в другое место или вообще в другой лэйаут через addItem() или вообще его удалить.
|