July 15, 2019, 4:32 a.m.

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

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

Virtual hosting with 10 percent discount
Virtual hosting with 10 percent discount
EVILEG offers reliable hosting with a 10% discount for virtual hosting and 5% for VPS
8

Добрый день.

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

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

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

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

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

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

    Loader
    {
        id: loader
        anchors.fill: parent
        source: "FIrstWindow.qml"
    }

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

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

main.qml
import QtQuick 2.4
import QtQuick.Window 2.0
import QtQuick.Controls 2.5

Window {
    id: window
    width: 400
    height: 400
    visible: true

    Loader {
        id: loader
        anchors.fill: parent

        onSourceChanged: animation.running = true

        NumberAnimation {
            id: animation
            target: loader.item
            property: "x"
            from: -width
            to: 0
            duration: 1000
            easing.type: Easing.InExpo
        }
    }

    Button {
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 5

        text: qsTr("Click me")

        onClicked: {
            loader.source = "MyRectangle.qml"
        }
    }
}

MyRectangle.qml

import QtQuick 2.0

Rectangle {
    id: rect
    color: "red"
    width: 150
    height: 150
}

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

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

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

animation.property = "x" // добавить свойство для анимации
animation.property = "" // убрать свойство для анимации
loader.source = "MyRectangle.qml"

Спасибо.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Looking for a Job?
14,000.00 руб. - 40,000.00 руб.
Разработчик Qt
Annino, Moscow Oblast, Russia
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

D
Aug. 16, 2019, 11:58 a.m.
Damir

C++ - Тест 003. Условия и циклы

  • Result:92points,
  • Rating points8
D
Aug. 16, 2019, 11:46 a.m.
Damir

C++ - Test 005. Structures and Classes

  • Result:75points,
  • Rating points2
u
Aug. 14, 2019, 1:55 p.m.
unrealproro

C++ - Test 005. Structures and Classes

  • Result:83points,
  • Rating points4
Last comments
Aug. 19, 2019, 6:41 a.m.
Andrej Jankovich

это проблема дистрибутива, попробуйте установить через пакетный менеджер snap Суть проблемы: libQt5Core которая лежит в дистрибутиве требует версию glibc >= 2.25 у вас видимо …
b
Aug. 18, 2019, 5:09 a.m.
bbb116

cqtdeployer /home/aleks/CQtDeployer/bin/cqtdeployer: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /home/aleks/CQtDeployer/lib/libQt5Core.so.5) linux mint …
D
Aug. 17, 2019, 8:04 a.m.
Damir

github ChekableTView Правой групповая смена значения при перетаскивании левой как обычно.
Aug. 16, 2019, 12:03 p.m.
Evgenij Legotskoj

Потому, что в минуте 60 секунд
Aug. 16, 2019, 11:16 a.m.
Dmitrij

а почему делитель 60000, а не 1000?
Now discuss on the forum
Aug. 21, 2019, 2:16 a.m.
nayk1982

Если Вы разрабатываете какую-то универсальную утилиту, которая вообще не привязана к логике, тогда как вариант: 1. Получить список таблиц через QSqlDatabase::tables 2. Для каждой табли…
Aug. 21, 2019, 12:31 a.m.
grig_p

Спасибо большое. Я долгое время писал на Object Pascal, привык, что там любое исключение, а не только сгенерированное самостоятельно, может быть перехвачено и обработано в блоках try. Дело …
Aug. 20, 2019, 1:10 p.m.
Mihailll

Нужно будет попробовать подставть другой тип данных, может заработае validator: IntValidator {bottom: 1; top: 99999999999}
Aug. 20, 2019, 12:37 p.m.
Aleksandr Panjushkin

Добрый день. Я бы хотел добавить, что в вашем коде можно было бы использовать слово auto и цикл for с перебором. Так код получился бы компактнее: auto map = new QMap<Qstring, QString&…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB