2016-05-15 2 views
2

私は複数の画面間で画面を切り替える必要があるアプリケーションがあります。 qmlのローダーでこれが可能かどうかを確認しています。Qt - ローダーソースが動的に変更された場合、ローダー項目からの信号を接続する方法

私が直面している問題は、読み込まれたアイテムからの信号を接続することです。

Qtのドキュメントでアプリケーション例を使用していて、アプリケーションqmlのCreateConnectionにif条件が含まれていないことがわかりました。

また、関数内でシグナルスロット接続を行い、ローダーのソース変更を呼び出すことも試みましたが、それも機能しませんでした。

Application.qml

import QtQuick 2.0 

Item { 
    width: 100; height: 100 

    Loader { 
     id: myLoader 
     source: "MyItem.qml" 
    } 

    Connections { 
     target: myLoader.item 
     // here i tried using if (myLoader.item == "qrc:MyItemOne.qml") , but can't use if 
     onChangeToSecond: { 
       myLoader.source = "MyItemTwo.qml" 
     } 

     onChangeToFirst: { 
       myLoader.source = "MyItemOne.qml" 
     } 
    } 
} 

MyItemOne.qml

import QtQuick 2.0 

Rectangle { 
    id: myItem 
    signal changeToSecond() 

    width: 100; height: 100 

    MouseArea { 
     anchors.fill: parent 
     onClicked: myItem.changeToSecond() 
    } 
} 

MyItemTwo.qml

import QtQuick 2.0 

Rectangle { 
    id: myItem 
    signal changeToFirst() 

    width: 100; height: 100 

    MouseArea { 
     anchors.fill: parent 
     onClicked: myItem.changeToFirst() 
    } 
} 

誰かがこのためにローダーを使用する方法を知っている、またはローダは使用すべきではありませんこのため?

+1

「ローダー」はこれには使用しないでください(少なくとも一般的ではありません)。複数の画面がある場合は、['StackView'](http://doc.qt.io/qt-5/qml-qt-labs-controls-stackview.html)を使用してください。 – BaCaRoZzo

答えて

0

myLoader.source(Qt5.6.0)の初期値としてMyItemOne.qmlを使用すると、コードは正常に機能します。

QML Connections: Cannot assign to non-existent property "onChangeToFirst" 

MyItemOnechangeToFirst信号を定義していないため起こります。しかし、それは警告を出力します。 Connections要素のignoreUnknownSignalsプロパティを使用して警告を抑制するか、または両方の画面で同じ信号セットを定義する必要があります。

Loader切り替え時に以前のビューが常に完全にアンロードされていてもかまいません。

関連する問題