Название: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: ритт от Июль 27, 2008, 03:22 написал лэйоут, функционально похожий на examples/layouts/flowlayout.
метод minimumSize, ответственный за минимальный размер, возвращает максимальные ширину и высоту виджетов из списка + маржины Код: QSize FlowLayout::minimumSize() const в этом как раз и проблема - никак не удаётся реализовать правильный обсчёт. когда опрашивается minimumSize, геометрия уже сброшена и мы просто не знаем какие ширина/высота были удовлетворительными секунду назад чтобы вернуть их в качестве временного минимального размера. если, например, минимальный размер может измениться в зависимости от размера, переданного в setGeometry, то как уведомить виджет о том, что его минимальный размер изменился и виджет должен соответствующим образом пересчитать собственную геометрию?! parentWidget()->updateGeometry() не помогает...апдейт, инвалидэйт, постИвент - чего я только уже не пробовал. не могу сообразить каким макаром минимальный размер учитывается для верхнего виджета при каждом ресайзе, а для дочернего - лишь по праздникам...рррррррр :( Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: lit-uriy от Июль 27, 2008, 11:48 Цитировать метод minimumSize, ответственный за минимальный размер, возвращает максимальные ширину и высоту виджетов из списка + маржины в статье "Классы компоновки (http://crossplatform.ru/documentation/qtdoc4.3/layout.php)" написано:"sizeHint() и minimumSize() обычно имеют очень похожие реализации. Размеры, возвращаемые обеими функциями, должны включать spacing(), но не должны включать margin(). " Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: ритт от Июль 27, 2008, 15:04 у троллей сайзХинт, минимумСайз и максимумСайз включают margin
Код: void QBoxLayoutPrivate::setupGeom() но это к теме не относится. вопрос остаётся открытым: как лэйуоту заставить виджет пересчитать ограничивающие размеры? Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: Alex03 от Июль 28, 2008, 11:28 А что за виджеты внутри Вашего лэйаута?
Воpвращают ли они корректный minimumSize? Может так: Код: foreach (item, itemList) Но видимо дело не в этом... Этот лэйаут засунут в виджет, а виджет в другой лэйаут или как? Константин, минимальный примерчик компилябельный забубень, совместно поковыряемся. :) С вложенными лэйаутами "особенностей" тоже хватает... А уж с hasHeightForWidth()/heightForWidth(int width) тожа не всё гладко. Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: ритт от Июль 28, 2008, 14:26 > size = size.expandedTo(item->minimumSizeHint());
у QLayoutItem нет метода minimumSizeHint действительно, это нелогично, но работает именно так, как требуется...пока этот лэйоут установлен на топ-виджет минимальный пример - examples/layouts/flowlayout. попробуй заменить Код: Window::Window() Код: Window::Window() Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: Alex03 от Июль 29, 2008, 06:32 минимальный пример - examples/layouts/flowlayout. ХМ... Работает нормально. Qt 4.3.3 Win XP.попробуй заменить на .... Так тоже всё ОК: Код: Window::Window() Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: ритт от Июль 29, 2008, 07:29 блиаааааа...иптить!!!
попробуй в этом же примере сделать Виндов наследником кумэйнвиндов Код: class Window : public QMainWindow ну, или даже проще - с минимальными изменениями: Код: { Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: Alex03 от Июль 29, 2008, 08:14 Угу... Глючит...
В файлах
Такая вот багофича.... :( :( :( Название: Re: QLayout + minimumSize, изменяющийся динамически = рак мозга Отправлено: ритт от Июль 29, 2008, 16:12 классно! обалдеть...
я на это два вечера угрохал и безрезультатно :( наклепаю репорт и потом отпишусь |