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