2016-04-01 13 views
1

Ich entwickle eine Qt-App auf Win/Android. Meine Frage ist sehr einfach.Wie verhindert man die Wiederherstellung der Seite in einem Loader?

Wenn meine App startet, begrüßt Sie zunächst eine Anmeldeseite. Wenn Sie Servereinstellungen konfigurieren möchten, wird ServerInfo.qml in einem Loader geöffnet. Die Login-Seite und ServerInfo werden im selben Loader geladen. Mein Problem ist, dass, wenn ich ServerInfo.qml schließe, dann laden Sie loginpage.qml Loader, erstellt der Lader eine neue Instanz von loginpage.qml. Ich möchte nicht, dass die Seite erneut erstellt wird.

Hier ist mein QML-Code:

ApplicationWindow { 
    id:mainwindow 
    visible: true 
    width: 600 
    height: 800 
    x: Screen.width/2 - width/2 
    y: Screen.height/2 - height/2 
    menuBar:MenuBar{ 
    Menu { 
     title:"Edit" 
     MenuItem { 
     text:"Sunucu Ayarları" 
     onTriggered: { 
      loader.source="ServerConfig.qml" 
      loader.anchors.centerIn=main 
     } 
     } 
     MenuItem { 
     text:"Çıkış" 
     onTriggered: { 
      Qt.quit(); 
     } 
     } 
    } 
    } 
Connections { 
    ignoreUnknownSignals: true 
    target: process 
    onProcessstart: { 
    busyrec.visible=true; 
    busyloader.item.busytext=text; 
    busyloader.item.busyrunnig=true; 
    } 
    onProcessstop: { 
    busyloader.item.busytext=text; 
    busyloader.item.busyrunnig=false; 
    busyloader.item.busytextcolor="blue" 
    } 
    Component.onCompleted: { 
    // process.onSuccesLogin(); 
    //TaskResultm.taskresult.Malzemeler.push 
     console.log(TaskResultm.taskresult.serilaze()); 
    } 
} 

Column { 
    anchors.fill: parent 
    Rectangle { 
    id:busyrec 
    width: parent.width 
    height: (parent.height/10) 
    visible:true 
    color:"green" 
    Loader { 
     id:busyloader 
     source:"BusyIndicator.qml" 
     anchors.fill: parent 
    } 

    Connections { 
     ignoreUnknownSignals: true 
    } 
    } 

    Rectangle { 
    id: main 
    // anchors.fill: parent 
    width: parent.width 
    height: (parent.height/10)*9 
    Loader { 
     id:loader 
     source: "LoginPage.qml" 
     anchors.centerIn:parent 
     focus:true 
     property bool valid: item !== null 
    } 

    Connections { 
     ignoreUnknownSignals: true 
     target: loader.valid? loader.item : null 

     onDirecttomainpage:{ 
     //  process.getWorkOrderList(); 
      busyloader.item.switenabled=true; 
      busyloader.item.switopacity=1; 
      loader.anchors.fill=main; 
      loader.source="TaskNavigationMainScreen.qml"; 

     } 
     onServerinfopageclose: { 


      loader.source="LoginPage.qml"; 
       loader.anchors.centerIn=main; 

     } 
    } 


    } 

} 

    onClosing: { 

     if(Qt.platform.os=="android") { 

      if(loader.item!==null) 
      { 
      if(loader.item.objectName==="tasknavigationmain") 
       if(loader.item.zemin===0) 
        close.accepted=true; 
       else 
        close.accepted=false; 
      } 
     } 
     else if (Qt.platform.os=="windows") 
     { 
      Qt.quit(); 
       //if(loader.item!==null) 
       // if(loader.item.objectName==="tasknavigationmain") 
      //  console.log(loader.item.stackViewItem.depth); 
     } 


    } 


    } 

Antwort

2

Nur ein StackView anstelle ein Loader, wird es vorherige „Formen“ am Leben zu erhalten, wie Sie neue auf schieben, und Sie können immer hin und her gehen .

Ein Loader lädt ein einzelnes Element, wenn Sie ein anderes laden, wird das alte zerstört, es gibt keinen Weg.

+0

Sie können jedoch mehrere Lader haben. Das Idiom ist: ein Lader pro Artikel, den Sie später laden möchten. –

+0

Sie können so viele haben wie Sie möchten, aber Sie müssen trotzdem eine Art Sichtbarkeits- und Auftragsverwaltung implementieren. Es vereitelt den Zweck, besonders wenn Sie bereits die richtige Lösung für das Problem aus der Box haben. – dtech

Verwandte Themen