Russian Qt Forum
Ноябрь 01, 2024, 07:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: RowLayout+StackView непонятки  (Прочитано 3099 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Декабрь 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. Что неправильно?
Записан
vregess
Гость
« Ответ #1 : Декабрь 15, 2014, 16:39 »

Странное поведение (особенно если потыкать на кнопки).

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

Код:
        StackView {
            Layout.fillWidth: true
            Layout.fillHeight: true
        ....
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Декабрь 15, 2014, 17:24 »

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

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

С этими параметрами по крайней мере начальное позиционирование исправилось, но непонятно почему. Вероятно растяжение StackView заставило layout manager пересчитать какие-то свои внутренние структуры и начальный элемент отпозиционировался правильно. Но теперь второй баг - анимация смены элемента 1 на 2 идёт таким образом, что элемент 1 уезжает за пределы StackView влево и фактически движется по кнопке "Button1".
Записан
vregess
Гость
« Ответ #3 : Декабрь 15, 2014, 17:57 »

Если я правильно понял, то просто поставь

Код:
clip: true

у StackView.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Декабрь 15, 2014, 18:12 »

Если я правильно понял, то просто поставь
Код:
clip: true
у StackView.

да, с этим заработало. Спасибо за наводку с Layout.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 22.