Russian Qt Forum
Ноябрь 25, 2024, 14:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как избежать артефактов при цепочке изменений интерфеса?  (Прочитано 6129 раз)
Varan
Гость
« : Январь 13, 2009, 18:08 »

Вопрос, думаю, простой, но я не знаю, как его задать в поиске, поэтому:

Qt 4.4. На главной форме есть dockWidget, а на нем два QFrame в вертикальном Layout. Надо, чтобы при нажатии спец.кнопки один фрейм делался невидимым, а второй - видимым, а при отжатии - наоборот.
Если делать setVisible для одного и другого по очереди один за другим, то момент, когда один уже нарисован, а второй еще не убран, очень заметен. Есть ли какие-то операторы, чтобы отрисовка происходила только по завершению всей последовательности изменений типа setVisible?
Записан
BaltikS
Гость
« Ответ #1 : Январь 13, 2009, 18:21 »

Честно говоря не понятно о каких артефактах идёт речь...
Повторил всё в дизайнере связал сигнал toggled(bool) со слотами setShown(bool) и setHidden(bool), сделал Preview и всё работает как надо... Как всегда телепатов нет и нужен код  Подмигивающий
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Январь 13, 2009, 18:24 »

Функция setUpdatesEnabled,
Но можно и виджеты положить на QStackedLayout
Записан

Юра.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 13, 2009, 18:41 »

Но можно и виджеты положить на QStackedLayout

+1
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Varan
Гость
« Ответ #4 : Январь 13, 2009, 18:49 »

А StackedWidget Для StackedLayout не обязательно делается? А то в designer обнаружил только StackedWidget, а это мне не подойдет.

насчет двух сигналов это я не думал, я просто подряд делал.
Код
C++ (Qt)
bool isEditModeOn = ui.acEditMode->isChecked();
ui.frmEditTools->setVisible(isEditModeOn);
ui.frmWorkTools->setVisible(!isEditModeOn);

И еще вопрос: а setUpdatesEnabled для чего нужно вызывать?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Январь 13, 2009, 19:07 »

И еще вопрос: а setUpdatesEnabled для чего нужно вызывать?
для виджета, в котором нужно временно запретить обновление, фактически обрамляешь кусок кода двумя вызовами:
setUpdatesEnabled(false)
...
большие обновления
...
setUpdatesEnabled(true)
Записан

Юра.
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Январь 13, 2009, 19:15 »

А StackedWidget Для StackedLayout не обязательно делается? А то в designer обнаружил только StackedWidget, а это мне не подойдет.
насчет того, что для кого не обязательно делается я не понял. Ты можешь применить QStackedWidget. Возможно что тебя в дизайнере кнопки листания в этом виджете смутили. Их не будет в реальности они для удобства работы в дизайнере. Проверь сам: меню "Form" -> "Preview"
Записан

Юра.
Varan
Гость
« Ответ #7 : Январь 13, 2009, 20:16 »

для виджета, в котором нужно временно запретить обновление, фактически обрамляешь кусок кода двумя вызовами:
setUpdatesEnabled(false)
...
большие обновления
...
setUpdatesEnabled(true)
пробовал для dockWidget, не сработало. Надо для главного окна? setUpdatesEnabled - это же не глобальная функция, а член класса, там надо что-то впереди написать ИМХО.

асчет того, что для кого не обязательно делается я не понял. Ты можешь применить QStackedWidget. Возможно что тебя в дизайнере кнопки листания в этом виджете смутили. Их не будет в реальности они для удобства работы в дизайнере. Проверь сам: меню "Form" -> "Preview"
Посмотрел, кнопки листания есть Улыбающийся. Плюс он уменьшает ширину того, что в нем находится.
Записан
ритт
Гость
« Ответ #8 : Январь 13, 2009, 21:25 »

пользуй QStackedLayout и не смеши народ.
по setUpdatesEnabled() читай ассистант там всё есть!
Записан
SABROG
Гость
« Ответ #9 : Январь 13, 2009, 22:35 »

Qt 4.4. На главной форме есть dockWidget, а на нем два QFrame в вертикальном Layout.

Я правильно понимаю, есть DockWidget, который является parent'ом для двух QFrame'ов, каждый из которых лежит на общем QVBoxLayout (вертикальный Layout). Т.е. друг над другом не перекрывая друг друга и в разные моменты виден либо верхний либо нижний фрейм и позиции их и размеры должны быть фиксированными?
« Последнее редактирование: Январь 13, 2009, 22:38 от SABROG » Записан
Varan
Гость
« Ответ #10 : Январь 14, 2009, 23:42 »

Я правильно понимаю, есть DockWidget, который является parent'ом для двух QFrame'ов, каждый из которых лежит на общем QVBoxLayout (вертикальный Layout). Т.е. друг над другом не перекрывая друг друга и в разные моменты виден либо верхний либо нижний фрейм и позиции их и размеры должны быть фиксированными?
Сильно понимаю, что щас меня будут бить, но сразу говорю - я запихнул всё только в один фрейм и рад невозможно. Поэтому практическая сторона вопроса отпала.
А касаемо того, что было - да, только Layout делался не как отдельный объект в designer, а через меню Form. Просто про StackedLayout я не знал и попробовал сделать так. Как оказалось, фреймы действительно начали становиться на одно и то же место, но не без огрехов, которые я и пытался описать.
Спасибо за вашу отзывчивость.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.223 секунд. Запросов: 22.