Push-компонент QML StackView со свойствами

В документах QML StackView упоминается что вы можете отправить item с такими свойствами:
stackView.push({item: someItem, properties: {fgcolor: "red", bgcolor: "blue"}})

Есть ли способ, с помощью которого мы можем протолкнуть component со свойствами? Мои компоненты в основном являются оболочками других файлов .qml для разных представлений моего приложения, например:

Component{
    id: loginComponent
    Login{}//The Login.qml file of my project
}

Вот что я пытаюсь:
Main.qml

    ApplicationWindow {
    id: appWindow
    visible: true
    width: Screen.desktopAvailableWidth
    height: Screen.desktopAvailableHeight
    property alias stackv: stackv
    property alias loginComponent: loginCom
        StackView {
        id: stackv
        anchors.top: topHeader.bottom
        anchors.topMargin: 10
        anchors.bottom: parent.bottom
        width: parent.width
        focus: true
            Component {
            id: loginCom
            Login {
                anchors.fill: parent
            }
        }
    }
    }

В другом файле QML, который был добавлен в качестве компонента в представление стека, я пробую это для одного из методов onClick кнопки:

onClicked: {
            appWindow.stackv.push({item: appWindow.loginComponent})
        }

Меня выдает эта ошибка:

QML StackView: push: нечего нажимать

Если я попробую это без свойства item, это сработает. Однако в любом случае я не могу нажимать свойства.


person Akash Agarwal    schedule 04.07.2016    source источник


Ответы (1)


В документации, на которую вы ссылаетесь, первая фраза говорит:

Элемент, помещенный в StackView, может быть элементом, URL-адресом, строкой, содержащей URL-адрес, или компонентом.

Так что просто передайте компонент:

stackView.push({item: loginComponent, properties: {/*...*/}})

РЕДАКТИРОВАТЬ: оказывается, что после того, как вы отредактировали вопрос и добавили вывод предупреждения, вы фактически используете StackView из Qt Quick Controls 2, а не из Qt Quick Controls 1, на который указывает ваша ссылка на документацию.

  • QML StackView::push() (Быстрое управление Qt 2)
  • stackView.push(loginComponent, {/*...*/})
person jpnurmi    schedule 04.07.2016
comment
Обязательно прочитайте документацию по правильному набору элементов управления, потому что в этих двух разных основных версиях есть некоторые незначительные различия API. Кроме того, для дальнейшего использования, когда вы вставляете файл QML, пожалуйста, не пропускайте импорт. - person jpnurmi; 05.07.2016
comment
Стыдно, спасибо, что указали на это. Я позабочусь в будущем. - person Akash Agarwal; 06.07.2016