Russian Qt Forum

Qt => Qt Quick => Тема начата: Alex Custov от Декабрь 15, 2014, 16:12



Название: RowLayout+StackView непонятки
Отправлено: Alex Custov от Декабрь 15, 2014, 16:12
Есть RowLayout с содержимым "<Button1><StackView><Button2>". По моему разумению содержимое StackView никак не должно иметь координату x меньше, чем Button1.x+Button1.width. Однако получается так как в аттаче (элемент Text рисуется прямо поверх первой кнопки). Код:

Код:
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1

ApplicationWindow {
    id: applicationWindow
    visible: true
    width: 320
    height: 240
    title: qsTr("Hello, world")

    RowLayout {
        anchors.fill: parent

        Button {
            text: "<"

            onClicked: {
                stack.pop();
            }
        }
        StackView {
            Text {
                id: text1
                text: "1"
                visible: false
            }

            Text {
                id: text2
                text: "2"
                visible: false
            }

            id: stack
            initialItem: text1
        }
        Button {
            text: ">"

            onClicked: {
                stack.push(text2);
            }
        }
    }
}

После операции push (нажатие на Button2) и pop (нажатие на Button1) первый элемент уже отображается с правильными координатами, а вторая кнопка уезжает за пределы окна. Qt 5.3.2 и 5.4.0. Что неправильно?


Название: Re: RowLayout+StackView непонятки
Отправлено: vregess от Декабрь 15, 2014, 16:39
Странное поведение (особенно если потыкать на кнопки).

Но в твоем случае, правильнее так:

Код:
        StackView {
            Layout.fillWidth: true
            Layout.fillHeight: true
        ....


Название: Re: RowLayout+StackView непонятки
Отправлено: Alex Custov от Декабрь 15, 2014, 17:24
Но в твоем случае, правильнее так:

Код:
        StackView {
            Layout.fillWidth: true
            Layout.fillHeight: true
        ....

С этими параметрами по крайней мере начальное позиционирование исправилось, но непонятно почему. Вероятно растяжение StackView заставило layout manager пересчитать какие-то свои внутренние структуры и начальный элемент отпозиционировался правильно. Но теперь второй баг - анимация смены элемента 1 на 2 идёт таким образом, что элемент 1 уезжает за пределы StackView влево и фактически движется по кнопке "Button1".


Название: Re: RowLayout+StackView непонятки
Отправлено: vregess от Декабрь 15, 2014, 17:57
Если я правильно понял, то просто поставь

Код:
clip: true

у StackView.


Название: Re: RowLayout+StackView непонятки
Отправлено: Alex Custov от Декабрь 15, 2014, 18:12
Если я правильно понял, то просто поставь
Код:
clip: true
у StackView.

да, с этим заработало. Спасибо за наводку с Layout.