В настоящее время я создаю приложения в Meego с использованием QML и JS в большинстве случаев. и теперь я наткнулся на проблему.
Из javascript я хочу вызвать функцию C ++, чтобы прочитать текстовый файл, проанализировать его, а затем вернуть массив результата анализа.
поэтому я создаю функцию Q_INVOKABLE с именем parse () и вызываю ее через 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 еще [undefined].
что-то не так с преобразованием?