我目前在Meego中使用QML和JS在大部分部分中創建應用程序。現在我偶然發現了一個問題。Qt將Qvariantlist轉換爲javascript數組失敗
從javascript我想調用一個C++函數來讀取文本文件,解析它,然後返回一個解析結果的數組。 所以我創建)稱爲解析(一Q_INVOKABLE功能,並調用它通過JavaScript
function parse() {
var myArray = new Array();
myArray = parser.parse("/home/user/MyDocs/angklungtext.txt")
if(myArray === undefined){
console.log("null found");
}
for(var i = 0; i < myArray.length; i++){
console.log(myArray[i][0] + "," + myArray[i][1])
}
}
,這裏是在C解析函數++
QVariantList* QMLParser::parse(QString filename)
{
qDebug() << "start debugging";
qDebug() << filename;
qDebug() << QDir::currentPath();
QDir dir;
qDebug()<< dir.absoluteFilePath(filename);
QFile file(filename);
if(!file.exists())
{
qDebug() << "File: " << file.fileName() << "tidak ditemukan";
return NULL;
}
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << "Tidak dapat membuka file" << file.fileName() << "untuk ditulis";
return NULL;
}
QTextStream stream(&file);
QVariantList* myList = new QList<QVariant>;
while(!stream.atEnd())
{
QString line = stream.readLine();
qDebug() << line.trimmed();
QStringList lineList = line.split(":");
myList->append(lineList);
}
file.close();
return myList;
}
黯然。 當我嘗試運行它,它給人一種結果,這樣
start debugging
"/home/user/MyDocs/angklungtext.txt"
"/home/developer"
"/home/user/MyDocs/angklungtext.txt"
"1:1000"
"4:2000"
"5:3000"
"2:4000"
null found
file:///opt/memoryreader/qml/memoryreader/myjs.js:8: TypeError: Result of expression 'myArray' [undefined] is not an object.
看起來像C++解析函數成功解析文件。它可以讀取它並將其保存到QVariantList中。 但它將結果返回到JavaScript myArray仍[未定義]。 轉換有問題嗎?
如果我通過值返回它,則返回NULL;在某些條件分支上不能完成 – Fugogugo
那麼,如何區分返回null和undefined呢?正如我所說的,我並沒有真正使用過QtScript,但我認爲不是從這些函數返回C++ NULL等,而是應該使用像http://doc.qt.nokia.com/latest/qscriptvalue .html ...取決於Q_INVOKABLE的功能,但如果它符合您的想法,我會感到驚訝。 – HostileFork
我會說,返回一個QVariant。如果遇到錯誤,可以爲空,如果成功,也可以包含QVariantList(按值)。 JS部分應該適當地處理IIRC的轉換。 – Steffen