Have you met a load problem of XmlListModel in an embedded platform
-
What in my understanding the xml file should be automatically loaded when the qml file using the XmlListModel executed.
If my understanding is correct?
-
bq. If my understanding is correct?
yes, thats correct. Maybe you have malformed the XmlListModel parameters. Can you provide that code for testing ?
-
I put my xml and qml file both in qml/myapp/myfunc folder
and then content of the source code are
-
qml/myapp/myfunc/xmldata.xml
@<?xml version="1.0" encoding="utf-8"?>
<List>
<Line type="Kind" index="0">
<title>Kind 1</title>
</Line>
<Line type="Item" index="1">
<title>Item one</title>
<id>id0001</id>
<comment>Item one comment</comment>
<times>1</times>
<rank>red</rank>
</Line>
<Line type="Item" index="2">
<title>Item two</title>
<id>id0002</id>
<comment>Item two comment</comment>
<times>1</times>
<rank>red</rank>
</Line>
<Line type="Item" index="3">
<title>Item three</title>
<id>id0003</id>
<comment>Item three comment</comment>
<times>2</times>
<rank>gray</rank>
</Line>
</List>@ -
qml/myapp/myfunc/xmldata.qml
@// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
Rectangle {
id: root
width: 480
height: 800XmlListModel { id: xmlModel source: "xmldata.xml" query: "/List/Line" XmlRole { name: "type"; query: "@type/string()" } XmlRole { name: "index"; query: "@index/string()" } XmlRole { name: "title"; query: "title/string()" } XmlRole { name: "id"; query: "id/string()" } XmlRole { name: "comment"; query: "comment/string()" } XmlRole { name: "times"; query: "times/string()" } XmlRole { name: "rank"; query: "rank/string()" } }
...
function do_xmldata_work()
{
console.log("do_xmldata_work begin>: ")
while(xmlModel.status != XmlListModel.Ready)
console.log("loading xml file: " + xmlModel.status)
console.log("loading xml file: " + xmlModel.status + " || finished")... }
}
@ -
-
I want to call the do_xmldata_work() function from some other qml file.
When I do this:- On desktop
it will output as follows:
bq. do_xmldata_work begin>:
loading xml file: 1 || finished- on Qtembedded platform
it will output:
bq. do_xmldata_work begin>:
loading xml file: 2
loading xml file: 2
loading xml file: 2
loading xml file: 2
loading xml file: 2
loading xml file: 2
loading xml file: 2
... - On desktop
-
I can't tell whats going wrong :( . The xml file seems to be found by XmlListModel, but my suspicion goes to the function do_xmldata_work(). Can you add in XmlListModel element this code and comment out the content of that function:
@
if (status === XmlListModel.Ready) console.log("XmlListModel.Ready ", count);
if (status === XmlListModel.Loading) console.log("XmlListModel.Loading");
if (status === XmlListModel.Error) console.log("XmlListModel.Error: ", errorString);
if (status === XmlListModel.Null) console.log("XmlListModel.Null");@ -
Do you means that change
@function do_xmldata_work()
{
console.log("do_xmldata_work begin>: ")
while(xmlModel.status != XmlListModel.Ready)
console.log("loading xml file: " + xmlModel.status)
console.log("loading xml file: " + xmlModel.status + " || finished")... }@
into
@function do_xmldata_work()
{
console.log("do_xmldata_work begin>: ")
//while(xmlModel.status != XmlListModel.Ready)
// console.log("loading xml file: " + xmlModel.status)
if (status === XmlListModel.Ready) console.log("XmlListModel.Ready ", count);
if (status === XmlListModel.Loading) console.log("XmlListModel.Loading");
if (status === XmlListModel.Error) console.log("XmlListModel.Error: ", errorString);
if (status === XmlListModel.Null) console.log("XmlListModel.Null");console.log("loading xml file: " + xmlModel.status + " || finished") ... }@
-
oh sorry. I forgot to write the signal. I mean this:
@XmlListModel {
id: xmlModel
....
onStatusChanged: {
if (status === XmlListModel.Ready) console.log("XmlListModel.Ready ", count);
if (status === XmlListModel.Loading) console.log("XmlListModel.Loading");
if (status === XmlListModel.Error) console.log("XmlListModel.Error: ", errorString);
if (status === XmlListModel.Null) console.log("XmlListModel.Null");
}}@
and do not call do_xmldata_work() function. Just for testing and see if the xml file has problems
-
OK, I will try, it may cost some time on both platforms
Thank you very much. -
Using
@ XmlListModel {
id: xmlModel
....
onStatusChanged: {
if (status === XmlListModel.Ready) console.log("XmlListModel.Ready ", count);
if (status === XmlListModel.Loading) console.log("XmlListModel.Loading");
if (status === XmlListModel.Error) console.log("XmlListModel.Error: ", errorString);
if (status === XmlListModel.Null) console.log("XmlListModel.Null");
}}@
-
On desktop: Only one line output
@XmlListModel.Loading
XmlListModel.Ready 4@ -
On Qtembedded: Only one line output
@XmlListModel.Loading@
-
-
It seems that on Qtembedded platform, that the loading never finished.
Why, am I using the the wrong path of the xml file? -
bq. Why, am I using the the wrong path of the xml file?
That was my first thought, but if XmlModelList doesn't find the file an Error or Null signal should be emitted. You also can try to store the xml file in a known directory and set the source property with the full path.
What is your embedded platform ? -
I have tried the absolute path before, it will output all the same.
In fact, I do not know what my embedded platform is.
I only know that the toolchain is from freescale,
for that the compiler is called as "arm-fsl-linux-gnueabi-g++" with a "fsl", I guessed that it was a freescale platform.
Maybe iMx53 serials. But I do not know exactly.If this is a bug, where the bug is locating in your mind.
In the "qmlapplicationviewer" source in my project,
or somewhere underneath in the Qt framework? -
with a wrong path
@source: "errorxmldata.xml"@
on Desktop outputs
@XmlListModel.Loading
XmlListModel.Error: [object Object]@while on Qtembeded platform
@XmlListModel.Loading
XmlListModel.Error: [object Object]@The same as you thought.
-
Sorry but I have no more suggestions.
I searched if there is some on "bugreports":https://bugreports.qt-project.org but didn't found any. You can try there to file a new bug reporting on which platform you find it.good luck