Название: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 12, 2011, 19:53 Всем привет.
Есть программа, основанная на классе QMainWindow, в котором помещены виджеты QGarphicsView и панель управления.Хочу чтоб при нажатии кнопки панель управления скрывалась.Видел что-то подобное в примерах QML, так что единственный вариант что приходит в голову создать объект QDeclarative в нём описать объект QML и привязать размеры виджета к размерам QML.Так как с QML не имел дела, не знаю насколько это возможно, и вообще может можно сделать как-то по-другому? Название: Re: Скрывающийся виджет. Отправлено: kambala от Декабрь 12, 2011, 20:31 что такое "панель управления"? тулбар главного окна?
у всех виджетов есть метод setVisible(bool) (или его аналоги show()/hide()). Название: Re: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 12, 2011, 21:00 Да, тулбар окна.
Да, данный метод действительно убирает тулбар, но хотелось сделать всё это с анимацией. Название: Re: Скрывающийся виджет. Отправлено: kambala от Декабрь 13, 2011, 02:04 QPropertyAnimation
Название: Re: Скрывающийся виджет. Отправлено: lighting от Декабрь 13, 2011, 15:26 QPropertyAnimation Какое свойство будем анимировать? AFAIK у виджета нет свойства "прозрачность".Понятно что можно paintEvent переопределить, но думаю проще будет QML вставить. Название: Re: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 13, 2011, 16:09 QPropertyAnimation Какое свойство будем анимировать? AFAIK у виджета нет свойства "прозрачность".Понятно что можно paintEvent переопределить, но думаю проще будет QML вставить. Название: Re: Скрывающийся виджет. Отправлено: kambala от Декабрь 13, 2011, 17:24 QPropertyAnimation Какое свойство будем анимировать? AFAIK у виджета нет свойства "прозрачность".Понятно что можно paintEvent переопределить, но думаю проще будет QML вставить. Название: Re: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 13, 2011, 18:43 QPropertyAnimation Какое свойство будем анимировать? AFAIK у виджета нет свойства "прозрачность".Понятно что можно paintEvent переопределить, но думаю проще будет QML вставить. Прозрачность тоже не совсем подойдёт, хотелось бы чтоб по скрыванию тулбара всё место занимал виджет QGraphicsView. Название: Re: Скрывающийся виджет. Отправлено: kambala от Декабрь 13, 2011, 21:01 Прозрачность тоже не совсем подойдёт, хотелось бы чтоб по скрыванию тулбара всё место занимал виджет QGraphicsView. ну так проанимировать прозрачность, а потом вызвать тулбару hide()Название: Re: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 14, 2011, 12:02 Прозрачность тоже не совсем подойдёт, хотелось бы чтоб по скрыванию тулбара всё место занимал виджет QGraphicsView. ну так проанимировать прозрачность, а потом вызвать тулбару hide()Но пишет вот такую ошибку: Warning: Property declaration windowOpacity has no READ accessor function. The property will be invalid. Хотя сам метод windowOpacity прекрасно работает. Название: Re: Скрывающийся виджет. Отправлено: navrocky от Декабрь 14, 2011, 13:57 windowOpacity работает только с top виджетами (окнами), для виджетов лежащих на форме оно не работает (тулбар).
Прозрачность для виджетов можно менять с помощью QGraphicsOpacityEffect, установив его виджету с помощью метода setGraphicsEffect. При анимировании прозрачности эффекта место под тулбаром в любом случае резервируется и не будет уменьшаться. При использовании метода setVisible тулбар схлопнется скачкообразно. Можно попробовать анимировать вместе с прозрачностью, еще и высоту тулбара. Хотя я не уверен, что это сработает. В этом случае лучше всего не использовать тулбары, а кнопки расположить на обычном виджете, тогда точно удастся анимировать его высоту. Название: Re: Скрывающийся виджет. Отправлено: kambala от Декабрь 14, 2011, 14:42 При анимировании прозрачности эффекта место под тулбаром в любом случае резервируется и не будет уменьшаться. При использовании метода setVisible тулбар схлопнется скачкообразно. а нельзя проанимировать прозрачность, а потом синглшотовым таймером через 0-0.1 сек. хайднуть тулбар?Название: Re: Скрывающийся виджет. Отправлено: lighting от Декабрь 14, 2011, 16:14 я-то думал нужна анимация именно через уменьшение прозрачности виджета. В данном случае думаю подойдет move для тулбара чтобы задвинуть его вверх и geometry для QGarphicsView чтобы занять освободившееся место. Все это в параллельную анимацию.
Название: Re: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 14, 2011, 18:08 Извиняюсь я немнога не правильно описал проблему, тулбар у меня реализован как отдельный виджет, а не тулбар как элемент mainWindow.Изначально необходимо чтобы всё окно занимал виджет QGraphicsView, а поверх него необходимо поместить виджет, который будет прицеплен к краю окна(MainWindow) и по желанию пользователя его можно было скрывать(с анимацией соотвественно).QGraphicsWidget не подходит т.к. виджет определён внутри сцены и соотвественно координаты его тоже привязаны к сцене.
В принципе идеально было бы что-то подобное реализации DockWidget только поверх центрального виджета и добавить анимацию виджета, такое вообще можно сделать используя Qt? Название: Re: Скрывающийся виджет. Отправлено: lighting от Декабрь 15, 2011, 10:22 Ну так и в чем проблема? Тогда вообще просто анимируйте положение вашего toolbar, например так
Создаем анимацию Код Скрываем тулбар Код
Название: Re: Скрывающийся виджет. Отправлено: nike1987 от Декабрь 15, 2011, 12:35 Ну так и в чем проблема? Тогда вообще просто анимируйте положение вашего toolbar, например так Проблема таже, панель убирается, но фон при этом остаётся. Можн кнечн добавить после setVisible, но это не совсем то что нужно.Создаем анимацию Код Скрываем тулбар Код
Название: Re: Скрывающийся виджет. Отправлено: popper от Декабрь 15, 2011, 15:01 Попробуй анимировать QSplitter
Название: Re: Скрывающийся виджет. Отправлено: lighting от Декабрь 15, 2011, 16:32 Проблема таже, панель убирается, но фон при этом остаётся. Можн кнечн добавить после setVisible, но это не совсем то что нужно. Какой фон остаеться? :-\Насколько я понял вашу задачу у вас есть QGraphiscView растянутый на все окно, и поверх него есть ваш toolbar. Если так то не понятно что за фон у вас там остается. Или GraphicsView занимает не весе окно, а оно разделено между вьювом и тулбаром? Если так то помимо анимации тулбара добавьте анимацию geometry для GraphicsView и запустите их в вместе в QParallelAnimationGroup |