2015-06-20 234 views
0

我有兩個QML文件。 在First.qml我可以使可見Second.qml。在Second.qml中我有selectedParts變量。 我想設置selectedParts爲值總是,當我使Second.qml可見。這隻適用於我第一次加載 Second.qml。如果我製作Second.qml隱形然後可見,selected部件值是。無論如何 使selectedParts變量公開,並設置它的值總是當我點擊myImage?QML:公共變量

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'增加'selectedParts'(只要沒有其他 - 未顯示的代碼 - 影響變量),就沒有辦法。此外,'selectedParts'可在代碼中作爲頂級變量訪問,使其可以在First.qml中看到。如果您的代碼發佈*代碼中存在特定問題。無論如何,當組件可見時將變量設置爲'2',可以在'onVisibleChanged'內執行,即'onVisibleChanged:if(visible)selectedParts = 2'。如果內部作用域中有變量,請考慮[別名](http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html)。 – BaCaRoZzo

+1

那麼,如果你只是'second.visible = true; second.selectedParts = 1;'in'First'? – hyde

+0

hyde變量selectedParts在First.qml中不可訪問 –

回答

0

我加入後退按鈕進入Second.qml文件解決我的問題。在這個按鈕中,我把語句selectedParts = 1.

2

QML公共變量?查找Defining QML types from C++中的MessageBoard。我們正在使用這種方法。所有你需要的是創建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);