2016-04-01 38 views
1

Win/Android'de bir Qt uygulaması geliştiriyorum. Benim sorum çok basit.Yükleyicide sayfanın rekreasyonu nasıl önlenir?

Uygulamam başladığında, önce bir giriş sayfası sizi karşılar. Sunucu ayarlarını yapılandırmak isterseniz, bir yükleyicide ServerInfo.qml açılır. Giriş sayfası ve ServerInfo aynı yükleyiciye yüklenir. Benim sorunum, ServerInfo.qml kapattığımda, yükleyiciye loginpage.qml yüklendiğinde, yükleyici loginpage.qml'un yeni bir örneğini oluşturur. Sayfanın yeniden oluşturulmasını istemiyorum.

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); 
     } 


    } 


    } 

cevap

2

Sadece yerine Loader bir StackView kullanmak üstte yenilerini itmek gibi canlı önceki "formları" tutacak ve her zaman ileri geri gidebilir: Burada

benim QML kodudur .

Bir yükleyici tek bir öğeyi yükleyecek, diğerini yüklerseniz, eski olanı yok edeceksiniz, bunun için bir yol yoktur.

+0

Yine de birden çok yükleyiciniz olabilir. Deyim: daha sonra yüklemek istediğiniz öğe başına bir yükleyici. –

+0

İstediğiniz kadar sahip olabilirsiniz, ancak yine de bir çeşit görünürlük ve sipariş yönetimi uygulamanız gerekecektir. Özellikle kutunun dışında problem için doğru çözüme sahip olduğunuzda, bu amacı yener. – dtech

İlgili konular