管理多个qml文件

时间:2013-10-23 22:44:55

标签: c++ qml qt5

我让一个程序工作不同的qml文件,首先显示一个获取idClient的屏幕,点击一个按钮并发一个帖子(它工作正常),第二,新屏幕获取idVent,点击一个按钮并发帖子(这个也工作),最后第三个屏幕显示了很多数据。我的问题偶尔可能是在post方法中得到一个错误,我会显示一条错误消息(这会随着按钮一起消失)而且我给出了如何参数字符串说错误(如何显示字符串不是问题,问题是如何通过字符串)。

我将有一个loader元素,如果我不包含错误管理,它可以正常工作。 我不希望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访问(我使用此clase for load main.qml),如何读取和设置MainView的属性

1 个答案:

答案 0 :(得分:0)

我&#39;得到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"
       }

    }
  }