管理多个 qml 文件



我让一个程序工作不同的qml文件,首先显示一个屏幕以获取idClient,单击一个按钮并发布一个帖子(它工作正常),其次,新屏幕获取idVent,单击一个按钮并发布一个帖子(这也有效),最后第三个屏幕显示大量数据。我的问题偶尔可能会在 post 方法中出现错误,我会显示一条错误消息(这随着按钮消失),并且我给出了字符串说错误的参数(如何显示字符串不是问题,问题是如何传递字符串)。

我将有一个加载器元素,如果我不包括错误管理,则可以正常工作。而且我不希望在 qml 中实例C++对象(例如我的 Httppost 类)。我的qml代码是这样的:

Loader {
    id: pageLoader // ID needed for so we can later delete the item
    source: "AnimationSplash.qml"
    focus: true
    property bool valid: item !== null
    anchors.horizontalCenter: parent.horizontalCenter
    objectName: "switchPages"
}
Timer {
    id: firstPhaseTimer
    interval: 750
    running: true
    repeat: false
    onTriggered:{
        pageLoader.item.opacity=0;
        pageLoader.source="SearchRecipient.qml"
    }
}
Connections{
    target:pageLoader.item
    ignoreUnknownSignals: true
    onPostIdClient: {
        postClient(pageLoader.typeId, pageLoader.textIdClient)
    }
    onPostIdVent: {
        postVent(pageLoader.textIdVent)
        pageLoader.source="MainView.qml"
    }
}

postIdClient 和 postIDVent 是来自加载文件的信号,但如果我的错误管理C++,任何人都知道如何更改 ErrorScreen。

我C++构造函数代码(是我加载main.qml文件的地方)是这样的:

  QObject *mainObject;
  QQuickView view;
  view.setSource(QUrl::fromLocalFile("./ui/main.qml"));
  view.setResizeMode(QQuickView::SizeRootObjectToView);
  view.show();

  mainObject=view.rootObject();
  QObject *switcher=mainObject->findChild<QObject*>("");
  if(mainObject)
  {
     QObject::connect(mainObject, SIGNAL(postClient(QString,QString)), this, SLOT(postingClientData(QString,QString)),Qt::UniqueConnection); 
     QObject::connect(mainObject, SIGNAL(postVent(QString)), this, SLOT(postIdVent(QString)),Qt::UniqueConnection); 
  }  

最后,如果我没有从 QQuickView 的子 QObject 访问,如何读取和设置 MainView 的属性(我使用此 clase 加载 main.qml)

我得到 parcial 答案,我使用变量属性来保持对页面的控制,并在 main.qml 中声明新信号,这些信号在执行加载项目的信号时发送,在C++注册错误时,我调用 qml 函数,并给出字符串错误如何参数。但是我没有采取和管理我的 mainView.qml(显示所有数据时的屏幕)的形式,如果我使用加载器组件加载,实际上我在 main.qml 中加载组件的方式,我显示代码。

Rectangle{
   width: 535
   height: 700
   color: "#939393"
   id: main
   signal changePage()//string page, variant data, int state)
   property alias pageLoaded: pageLoader.item
   signal postClient(string typeId,string textIdClient)
   signal postVent(string textIdVent)
   property int page
   property string messageError: ""
   onChangePage:{
      mainViewofProgram.opacity=1
   }

   Loader {
     id: pageLoader // ID needed for so we can later delete the item
     source: "AnimationSplash.qml"
     focus: true
     property bool valid: item !== null
     anchors.horizontalCenter: parent.horizontalCenter
     objectName: "switchPages"
   }
   Timer {
    id: firstPhaseTimer
    interval: 750
    running: true
    repeat: false
    onTriggered:{
        pageLoader.item.opacity=0;
        pageLoader.source="SearchRecipient.qml"
        }
    }

   MainView{
      id:mainViewofProgram
      opacity: 0
      width: parent.width
      height: parent.height
      objectName: "facturador"
   }

   Connections{
     target:pageLoader.item
     ignoreUnknownSignals: true
     onPostIdClient: {
        postClient( typeId, textId)
        console.log(typeId,textId)
        if(messageError=="")
        {pageLoader.source = "SearchVent.qml"}
        else
        {pageLoader.source = "ErrorServer.qml"
            page=1}
        }
    onPostIdVent: {
        postVent(textIdVent)
        if(messageError=="")
           {
            pageLoader.source=""
            pageLoader.opacity=0
            changePage()
            }
        else
        {pageLoader.source = "ErrorServer.qml"
            page=2}
        }

    onReturnPreviusPage:
       {
        if(page==2)
            pageLoader.source="SearchVent.qml"
        if(page==1)
            pageLoader.source="SearchRecipient.qml"
       }
    }
  }

相关内容

  • 没有找到相关文章

最新更新