私は現在、ほとんどの部分でQMLとJSを使用してMeegoでアプリケーションを作成しています。今問題に遭遇しました。Qt QvariantlistをJavaScript配列に変換できません
javascriptから私は、テキストファイルを読み込んで解析し、解析結果の配列を返すC++関数を呼び出す必要があります。 ので、私は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;
}
でparse関数であるパース(と呼ばれる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])
}
}
、ここを通してそれを呼び出します。 私はそれを実行しようとすると、それはこの
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++ parse関数のように見えます。それを読み取ることができ、それをQVariantListに保存することができます。 しかし、結果はまだjavascriptのmyArrayに返されます[未定義]。 変換に何か問題がありますか?
私が値で返した場合、NULLを返します。いくつかの条件分岐では実行できません – Fugogugo
さて、nullと未定義を返す方法を区別するにはどうすればよいですか?私が言うように、QtScriptは実際に使用していませんが、これらの関数からC++のNULLなどを返すのではなく、http://doc.qt.nokia.com/latest/qscriptvalue .html ... Q_INVOKABLEが何をするかによって異なりますが、あなたが考えるものがあれば驚くでしょう。 – HostileFork
QVariantを返します。エラーが発生した場合はnullになり、成功した場合はQVariantList(値で)も含めることができます。 JSの部分は、適切にIIRCの変換を処理する必要があります。 – Steffen