Михаиллл
July 15, 2019, 3:32 p.m.

Можно ли в QML плавно открывать новое окно

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

3

Do you like it? Share on social networks!

10
Evgenii Legotckoi
  • July 17, 2019, 12:52 a.m.

Добрый день.

Ну сделать с помощью Animation Property выплывание некоторых объектов можно, вот только классический диалог так сделать не получится. Да и скорее всего будет кастомный диалог в случае диалогов Android.

    Михаиллл
    • July 17, 2019, 12:04 p.m.

    Понятно, но я хотел не диалог так сделать, а открытие нового окна.

      Evgenii Legotckoi
      • July 17, 2019, 1:10 p.m.

      Мне кажется, что я не полностью понял, что вы подразумеваете под новым окном.
      Мы сейчас говорим об окнах в настолькой операционной системе? Windows или Ubuntu например? То есть о классических окнах?
      Или о мобильной? и вы подразумеваете анимированные переход на следующий экран в Android?

      Просто при разработке в QML/Android используется только одно окно и рамках которого делается разработка приложения, второе классическо окно открыть нельзя, это просто не работает.

      Поэтому я до конца не понимаю, что именно стоит вам посоветовать.

        Михаиллл
        • July 17, 2019, 1:18 p.m.

        Я имел ввиду QML/Android, использую подобный код для перехода между окнами

        1. Loader
        2. {
        3. id: loader
        4. anchors.fill: parent
        5. source: "FIrstWindow.qml"
        6. }

        Можно ли сделать открытие окон плавным и выезжающим с какой-нибудь стороны?

          Evgenii Legotckoi
          • July 17, 2019, 1:29 p.m.

          Ну здесь можно попробовать прикрутить анимацию к некоторым свойствам. Вот вам такой пример

          main.qml
          1. import QtQuick 2.4
          2. import QtQuick.Window 2.0
          3. import QtQuick.Controls 2.5
          4.  
          5. Window {
          6. id: window
          7. width: 400
          8. height: 400
          9. visible: true
          10.  
          11. Loader {
          12. id: loader
          13. anchors.fill: parent
          14.  
          15. onSourceChanged: animation.running = true
          16.  
          17. NumberAnimation {
          18. id: animation
          19. target: loader.item
          20. property: "x"
          21. from: -width
          22. to: 0
          23. duration: 1000
          24. easing.type: Easing.InExpo
          25. }
          26. }
          27.  
          28. Button {
          29. anchors.horizontalCenter: parent.horizontalCenter
          30. anchors.bottom: parent.bottom
          31. anchors.bottomMargin: 5
          32.  
          33. text: qsTr("Click me")
          34.  
          35. onClicked: {
          36. loader.source = "MyRectangle.qml"
          37. }
          38. }
          39. }

          MyRectangle.qml

          1. import QtQuick 2.0
          2.  
          3. Rectangle {
          4. id: rect
          5. color: "red"
          6. width: 150
          7. height: 150
          8. }
            Михаиллл
            • July 17, 2019, 1:32 p.m.

            Спасибо, а можно сделать анимацию не для все, а для некоторых страниц?

              Evgenii Legotckoi
              • July 17, 2019, 1:42 p.m.
              • The answer was marked as a solution.

              Этого можно добиться, если при загрузке того или иного QML файла переустанавливать анимированное свойство.

              Я не уверен, что это до конца правильно, но это рабочее решение. Тем более, что в документации я не вижу информации о том, как временно отключить работу анимации.

              1. animation.property = "x" // добавить свойство для анимации
              2. animation.property = "" // убрать свойство для анимации
              3. loader.source = "MyRectangle.qml"
                Михаиллл
                • July 17, 2019, 2:41 p.m.

                Спасибо.

                  KM
                  • Oct. 6, 2020, 12:09 p.m.
                  • (edited)

                  То что я искала, Евгений можно у Вас попросить пример кода как плавно открыть диалог в qt designer?
                  Заранее спасибо!

                    Evgenii Legotckoi
                    • Oct. 8, 2020, 3:48 a.m.

                    Я вам ответил в вашем вопросе, приложил там ссылки на пример. С Qt/C++ мороки будет больше. У меня к сожалению сейчас нет столько свободного времени, чтобы писать отдельный пример.

                      Comments

                      Only authorized users can post comments.
                      Please, Log in or Sign up
                      • Last comments
                      • AK
                        April 1, 2025, 11:41 a.m.
                        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                      • Evgenii Legotckoi
                        March 9, 2025, 9:02 p.m.
                        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                      • VP
                        March 9, 2025, 4:14 p.m.
                        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
                      • ИМ
                        Nov. 22, 2024, 9:51 p.m.
                        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                      • Evgenii Legotckoi
                        Oct. 31, 2024, 11:37 p.m.
                        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup