2015-06-20 4 views
0

У меня есть два файла QML. В First.qml Я могу сделать видимым Second.qml. В Second.qml у меня есть selectedParts переменная. Я хочу установить selectedParts значение всегда, когда я делаю Second.qml видно. Это работает только при загрузке Second.qml для первого раза. Если я сделаю Second.qml невидимым, а затем видно, selectedParts значение . Есть ли в любом случае , чтобы сделать selectedParts переменным общедоступным и установить его значение всегда, когда я нажимаю на myImage?QML: public variable

First.qml

Item { 
    Image { 
     id: myImage 
     MouseArea{ 
        anchors.fill: parent 
        onClicked: { 
        second.visible = true 
... 
      } 
     } 
    } 
} 

Second.qml

Item { 
    property int selectedParts: 1 
    Image { 
     id: myImage2 
     MouseArea{ 
        anchors.fill: parent 
        onClicked: { 
        selectedParts = 2 
... 
      } 
     } 
    } 
} 
+1

Нет пути от 'First.qml' до increment' selectedParts' (пока нет другого - не показан код - влияет на переменную). Кроме того, 'selectedParts' доступен в качестве переменной верхнего уровня в коде, что делает его видимым для' First.qml'. Если у вас есть конкретная проблема в коде кода * этого * кода. Во всяком случае, чтобы установить переменную в '2', когда компонент виден, вы можете сделать это внутри' onVisibleChanged', т. Е. 'OnVisibleChanged: if (visible) selectedParts = 2'. Если у вас есть переменные во внутренних областях, рассмотрите [aliases] (http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html). – BaCaRoZzo

+1

Итак, что произойдет, если вы просто сделаете 'second.visible = true; second.selectedParts = 1; 'in' First'? – hyde

+0

hyde variable selectedParts не доступен в First.qml –

ответ

0

Я решить мою проблему, добавив кнопку назад в файл Second.qml. И в этой кнопке я ставлю оператор selectedParts = 1.

2

QML общественная переменная? Найдите MessageBoard в Defining QML types from C++. Мы используем этот подход. Все, что вам нужно, это создать C++ объект ОБЪЯВЛЕНИЯ, поставить некоторые данные там и ссылаться на него через контекст QML дается каждому QML корневого объекта:

m_quickView.engine()->rootContext()->setContextProperty("myMsgBoard", MyQmlMsgBoard::instance()); 

И в QML:

Rectangle { 
    id: topRect 
    scale: myMsgBoard.scale // or anywhere in QML 
    // .... 
} 

Конечно, это «доска объявлений» объект C++ выставляет QML что-то вроде:

Q_PROPERTY(qreal scale READ scale CONSTANT); 
Смежные вопросы