Qt: Анимация «сворачивания» QWidget - PullRequest
1 голос
/ 10 июня 2010

У меня есть QWidget, который содержит различные другие виджеты. Я хочу анимировать его, появляющийся на экране, постепенно открывая его сверху вниз, увеличивая его высоту с 0 до того, каким будет его естественная высота.

То, как у меня это сейчас получается:

mAnimation = new QPropertyAnimation(this, "maximumHeight");
mAnimation->setStartValue(0);
mAnimation->setEndValue(400);
mAnimation->start();  

У этого есть две проблемы: - Вылетает, когда высота достигает определенной высоты, с ошибкой «qDrawShadeRect: Неверные параметры». - Если я изменяю 0 на 100, он работает нормально, но виджеты, содержащиеся в анимируемом мною QWidget, меняют свой макет по мере анимации виджета, начиная очень сжато и постепенно расширяясь, по мере того, как они получают больше места. Это выглядит некрасиво!

У кого-нибудь есть предложения?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Для второй проблемы я бы предложил обернуть все внутри виджета в другой виджет, который имеет фиксированный размер.Из-за отсечения виджетов это означает, что виджет покажет части полноразмерных виджетов во время анимации.

0 голосов
/ 11 июня 2010

В случае сбоя я бы рекомендовал захватить трассировку стека и, если проблема не в вашем коде, сообщить об этом как об ошибке .

Во-вторых, вместо того, чтобы отображать виджет именно там, где вы хотите, с разными размерами, визуализируйте его так, как вы хотите, чтобы его видели. Например:

  • Используйте QStackWidget с двумя элементами: фактическим виджетом и нужным виджетом
  • Желаемый виджет - это просто QWidget :: render () с растровым изображением того, как должен выглядеть виджет.
  • Для анимации покажите предварительно отрисованный виджет, а затем переключитесь, как только вы достигнете целевого размера.
...