我让一个程序工作不同的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的属性
答案 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"
}
}
}