Название: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: Varan от Январь 13, 2009, 18:08 Вопрос, думаю, простой, но я не знаю, как его задать в поиске, поэтому:
Qt 4.4. На главной форме есть dockWidget, а на нем два QFrame в вертикальном Layout. Надо, чтобы при нажатии спец.кнопки один фрейм делался невидимым, а второй - видимым, а при отжатии - наоборот. Если делать setVisible для одного и другого по очереди один за другим, то момент, когда один уже нарисован, а второй еще не убран, очень заметен. Есть ли какие-то операторы, чтобы отрисовка происходила только по завершению всей последовательности изменений типа setVisible? Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: BaltikS от Январь 13, 2009, 18:21 Честно говоря не понятно о каких артефактах идёт речь...
Повторил всё в дизайнере связал сигнал toggled(bool) со слотами setShown(bool) и setHidden(bool), сделал Preview и всё работает как надо... Как всегда телепатов нет и нужен код ;) Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: lit-uriy от Январь 13, 2009, 18:24 Функция setUpdatesEnabled,
Но можно и виджеты положить на QStackedLayout Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: pastor от Январь 13, 2009, 18:41 Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: Varan от Январь 13, 2009, 18:49 А StackedWidget Для StackedLayout не обязательно делается? А то в designer обнаружил только StackedWidget, а это мне не подойдет.
насчет двух сигналов это я не думал, я просто подряд делал. Код
И еще вопрос: а setUpdatesEnabled для чего нужно вызывать? Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: lit-uriy от Январь 13, 2009, 19:07 И еще вопрос: а setUpdatesEnabled для чего нужно вызывать? для виджета, в котором нужно временно запретить обновление, фактически обрамляешь кусок кода двумя вызовами:setUpdatesEnabled(false) ... большие обновления ... setUpdatesEnabled(true) Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: lit-uriy от Январь 13, 2009, 19:15 А StackedWidget Для StackedLayout не обязательно делается? А то в designer обнаружил только StackedWidget, а это мне не подойдет. насчет того, что для кого не обязательно делается я не понял. Ты можешь применить QStackedWidget. Возможно что тебя в дизайнере кнопки листания в этом виджете смутили. Их не будет в реальности они для удобства работы в дизайнере. Проверь сам: меню "Form" -> "Preview"Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: Varan от Январь 13, 2009, 20:16 для виджета, в котором нужно временно запретить обновление, фактически обрамляешь кусок кода двумя вызовами: пробовал для dockWidget, не сработало. Надо для главного окна? setUpdatesEnabled - это же не глобальная функция, а член класса, там надо что-то впереди написать ИМХО.setUpdatesEnabled(false) ... большие обновления ... setUpdatesEnabled(true) асчет того, что для кого не обязательно делается я не понял. Ты можешь применить QStackedWidget. Возможно что тебя в дизайнере кнопки листания в этом виджете смутили. Их не будет в реальности они для удобства работы в дизайнере. Проверь сам: меню "Form" -> "Preview" Посмотрел, кнопки листания есть :). Плюс он уменьшает ширину того, что в нем находится.Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: ритт от Январь 13, 2009, 21:25 пользуй QStackedLayout и не смеши народ.
по setUpdatesEnabled() читай ассистант там всё есть! Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: SABROG от Январь 13, 2009, 22:35 Qt 4.4. На главной форме есть dockWidget, а на нем два QFrame в вертикальном Layout. Я правильно понимаю, есть DockWidget, который является parent'ом для двух QFrame'ов, каждый из которых лежит на общем QVBoxLayout (вертикальный Layout). Т.е. друг над другом не перекрывая друг друга и в разные моменты виден либо верхний либо нижний фрейм и позиции их и размеры должны быть фиксированными? Название: Re: Как избежать артефактов при цепочке изменений интерфеса? Отправлено: Varan от Январь 14, 2009, 23:42 Я правильно понимаю, есть DockWidget, который является parent'ом для двух QFrame'ов, каждый из которых лежит на общем QVBoxLayout (вертикальный Layout). Т.е. друг над другом не перекрывая друг друга и в разные моменты виден либо верхний либо нижний фрейм и позиции их и размеры должны быть фиксированными? Сильно понимаю, что щас меня будут бить, но сразу говорю - я запихнул всё только в один фрейм и рад невозможно. Поэтому практическая сторона вопроса отпала.А касаемо того, что было - да, только Layout делался не как отдельный объект в designer, а через меню Form. Просто про StackedLayout я не знал и попробовал сделать так. Как оказалось, фреймы действительно начали становиться на одно и то же место, но не без огрехов, которые я и пытался описать. Спасибо за вашу отзывчивость. |