2017-01-14 19 views
0

Извините, возможно, для глупого вопроса - я очень новичок в QML.Доступ к QML StackView из элемента управления

Одна из страниц моего StackView в:

Page 
{ 
    id : root 

    header: ToolBar 
    { 
     BackButton 
     { 
      anchors.left: parent.left 
     } 
    } 
} 

BackButton код:

Button 
{ 
    text: "<" 
    font.pixelSize: 20 
    width: 30 
    onClicked: parent.root.StackView.view.pop() 
} 

Я попытался parent.StackView также. Не повезло. Получение:

TypeError: Cannot call method 'pop' of null 

Есть ли решение?

+0

Для дальнейшего использования ознакомьтесь с инструкциями о том, как создать минимальный пример в https://stackoverflow.com/help/mcve - в текущей форме, ваш пример не полностью завершен (это doesn 't включает импорт, и вообще не показывает StackView). –

ответ

0
  1. Существует некоторая ошибка в Qt или Visual Studio 2015. Полная перестройка требуется, как правило, после внесения некоторых изменений в QML.
  2. root.StackView.view.pop() является правильным.
2

Я предлагаю что-то подобное.

main.qml:

import QtQuick 2.6 
import QtQuick.Controls 2.0 

StackView { 
    id: stackView 
    initialItem: Page { 
     header: ToolBar { 
      BackButton { 
       anchors.left: parent.left 
       view: stackView 
      } 
     } 
    } 
} 

BackButton.qml:

import QtQuick 2.6 
import QtQuick.Controls 2.0 

Button { 
    property StackView view 
    text: "<" 
    font.pixelSize: 20 
    width: 30 
    onClicked: view.pop() 
} 

Таким образом, вы не полагаясь на id извне компонента. Вместо этого вы передаете экземпляр, в который вы хотите использовать BackButton, - это намного менее хрупко при рефакторинге в будущем.