如何防止在加载器中重新创建页面?

时间:2016-04-01 09:24:30

标签: c++ qt qml

我正在Win / Android上开发一个Qt应用程序。我的问题很简单。

当我的应用程序启动时,首先登录页面欢迎您。 如果要配置服务器设置,则在加载程序中打开ServerInfo.qml。登录页面和ServerInfo加载在同一个加载器中。 我的问题是,当我关闭ServerInfo.qml,然后将loginpage.qml加载到加载程序时,加载程序会创建loginpage.qml的新实例。我不希望再次创建页面。

这是我的Qml代码:

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


    }


  }

1 个答案:

答案 0 :(得分:2)

只需使用StackView代替Loader,它会让以前的“表单”保持活跃状态​​,因为您可以将新表单保持在最顶层,并且您可以随时往返。

加载器将加载一个元素,如果你加载另一个元素,旧的元素将被销毁,没有办法解决这个问题。