Название: как сделать анимацию Отправлено: muaddib1981@mail.ru от Ноябрь 06, 2009, 11:43 как сделать отображение перемещения объекта
Код не дает желаемого результата Код: QMainWindow *wnd1; И вся очередь событий выполняется при выходе из функции, но как же тогда быть? Название: Re: как сделать анимацию Отправлено: Igors от Ноябрь 06, 2009, 11:49 Заменить update на repaint
Название: Re: как сделать анимацию Отправлено: muaddib1981@mail.ru от Ноябрь 06, 2009, 11:58 Большое спасибо, сам бы мог догадаться! :D
Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 09, 2009, 21:41 что ж Вы в прошлом веке то сидите, когда есть такой замечательный фреймворк, как QStateMachine? :)
Название: Re: как сделать анимацию Отправлено: muaddib1981@mail.ru от Ноябрь 10, 2009, 11:22 а что это?
Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 10, 2009, 11:27 http://www.youtube.com/results?search_query=QStateMachine&search_type=&aq=f например :)
но выгуглить можно ещё кучу всего. При этом программируется очень легко (настройкой свойств) в несколько строк кода. Примеров в SDK так же хватает (qt\examples\animation; qt\examples\statemachine); P.S. QStateMachine введена в Qt 4.6. Название: Re: как сделать анимацию Отправлено: muaddib1981@mail.ru от Ноябрь 10, 2009, 11:36 да крутая штучка, только вот qt 4.6 не вышел еще
Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 10, 2009, 11:39 как это не вышел? ещё в марте можно было скачать образ Qt с QStateMachine. А бетки и technical preview ещё летом повыходили.
Название: Re: как сделать анимацию Отправлено: muaddib1981@mail.ru от Ноябрь 10, 2009, 11:48 на сайте qt.nokia.com, официально выложен только 4.5, 4.6 видимо еще бета.
Название: Re: как сделать анимацию Отправлено: Авварон от Ноябрь 10, 2009, 11:51 там слева внизу ссылка на бинарные сборки под все ОСи. Директ линк: http://qt.nokia.com/developer/qt-4.6-preview (http://qt.nokia.com/developer/qt-4.6-preview) Она глючная пока, но терпимо, для разработки как раз сойдет.
Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 10, 2009, 11:53 2muaddib1981@mail.ru:
Вот неверю что при использовании Qt 4.6 SDK вы найдёте хоть одну вещь, которой нету в Qt 4.5 или которая работает хуже, чем в Qt 4.5, или такую, которая не работает так, как нужно конкретно вам, и которая работает в Qt 4.5. Имхо technical preview это как раз не unstable release, который не рекомендуется использовать, а именно недоработанная версия будущего релиза. Т.е. фактически Qt 4.6 но без некоторых фич, которые будут в Qt 4.6. Но, по всей видимости, уже того функционала, который есть на сегодняшний день, вашим требованиям более чем достаточно :) Название: Re: как сделать анимацию Отправлено: Авварон от Ноябрь 10, 2009, 12:00 ну у меня на маке стабильно не прорисовывает нижний скроллбар в Ассистанте во вьюхе.
И почему-то модель моя хоть убей не хочет дропать url извне (как будто text/urls или как он там зовется не назначен. Под 4.5 было ок все, под виндой 4.5 также работает) Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 10, 2009, 12:02 2Авварон: ну я подразумевал именно релиз под Windows. Так то я скачал бетку под Symbian - глючит по страшному :) Но по умолчанию, вследствии зомбирования мозга виндой подразумевал именно её. А там багов за первое время использования так и не обнаружил.
Название: Re: как сделать анимацию Отправлено: Авварон от Ноябрь 10, 2009, 12:48 кстати вопрос, чтобы не создавать лишнюю. Как анимации дружат с лайаутами? То есть если я хочу плавно переместить виджеты и по другому - как мне это сделать?
Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 10, 2009, 14:31 2Авварон: Отвечу так: можно (скачай Qt 4.6 и посмотри animation example).
и немного доп. инфы: QState изменяют Q_PROPERTY а не конкретно QLayout или QWidget. Я создал собственный QAnimRectangle : public QObject, задефайнил там Q_PROPERTY (геометрию, полупрозрачность, там различная трансформация), ну и подключил обьект к QState. При каждом изменении вызывается сигнал QState::polished. Подключил к этому сигналу слот QWidget::update, и получил полностью свой класс (квадратик) с различной анимацией. Мегаудобно. В QLayout имеются: Q_PROPERTY(int margin READ margin WRITE setMargin) Q_PROPERTY(int spacing READ spacing WRITE setSpacing) Q_PROPERTY(SizeConstraint sizeConstraint READ sizeConstraint WRITE setSizeConstraint) соответственно можно оперировать этими 3мя величинами. А больше ничего другого изменить и не нужно. В QWidget, кроме всего прочего, есть: Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry) т.е. если ты через QState будешь изменять geometry, QWidget будет автоматически оповещать лайоут, ну и всё будет происходить как положено. а если чего не хватает, можно дописать свои Q_PROPERTY. QState работает через мета-информацию, поэтому может работать с любым QObject и изменять практически любую величину (оперируется QVariantом) Название: Re: как сделать анимацию Отправлено: Авварон от Ноябрь 10, 2009, 14:37 не, я в курсе как работает анимейшн фреймворк. Просто за размеры виджета всегда отвечал лайаут, а не наоборот. Поэтому если виджет в лайауте, то смысл менять его геометрию, если лайаут ее вернет обратно? ща пример шляну который ты говоришь
Название: Re: как сделать анимацию Отправлено: jasf от Ноябрь 10, 2009, 14:41 а. ну так в чём проблема.
Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize) Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize) Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false) Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false) Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false) Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false) Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement) Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize) ну или дописать property setSizeHint (ну т.е. функцию, которая будет принимать QSize и модифицировать значение, возвращаемое в sizeHint, и вызывать updateGeometry) Название: Re: как сделать анимацию Отправлено: manarch от Ноябрь 11, 2009, 08:57 кстати вопрос, чтобы не создавать лишнюю. Как анимации дружат с лайаутами? То есть если я хочу плавно переместить виджеты и по другому - как мне это сделать? А что сложного то? береш пример examples\layouts\flowlayout и в функции doLayout (при расчете позиции каждого элемента) в случае если этот элемент должен изменить свое текущее положение запускаеш таймер слот которого будет перемещать этот элемент с определенной тобой скоростью от исходного положения до нужного. При этом незабудь в этой функции запомнить какие элемнеты в данный момент анимируются и как их обрабатывать в момент анимации, т.е считать что они не изменили свою позицию или что уже изменили. От этого будет зависеть что делать с другими элементами положение которых зависти текущего анимированного элемента. Если еще проще то это значит у тебя они будут анимироваться по одному или всей кучей. Соответственно в слоте таймера ты задаеш тракторию перемещения элементов. Название: Re: как сделать анимацию Отправлено: manarch от Ноябрь 11, 2009, 12:47 Авварон Вот кстати между делом подредактировал пример чтобы была анимация перемещения. Можеш посмотреть и как примерно это работает.
|