Qt Qvariantlist转换为javascript数组失败
Qt Qvariantlist conversion into javascript array unsuccessful
我目前在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++的parse函数成功解析了文件。它可以读取它并将它保存到QVariantList中。但在它返回结果到javascript myArray仍然[undefined]。转换有什么问题吗?
就像这样简化c++代码:
QVariant QMLParser::parse(QString filename)
{
QStringList myList;
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);
while(!stream.atEnd()) {
QString line = stream.readLine();
qDebug() << line.trimmed();
myList << line.trimmed().split(":");
}
file.close();
return QVariant::fromValue(myList);
}
它应该可以工作!
请记住,QML必须看到QVariant
,即使QList
被包装在它里面,Qt能够使用QVariant::fromValue(T)
将其大多数基本类型转换为QVariant
,所以广泛使用它。
哦,顺便说一下,QVariant是引用而不是指针。
我自己没有做过,所以我只是在大声思考。但是我注意到你正在返回一个指向QVariantList的指针…这看起来很可疑。(还有:如果你做new
,那么谁来做delete
呢?)
你试过按值返回它吗?
相关文章:
- 从父数组测试用例构造二叉树失败
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 分段失败反向数组
- Lambda 捕获数组元素失败
- UINT8数组对INT64的质量化失败,但应该起作用
- 简单的2D数组标头文件,打印失败
- constexpr + 多维数组失败
- 从 3D 数组转换为 1D 数组失败
- 十六进制数组 cout 到文本文件失败
- 动态分配缓冲空间为二维数组 - 为什么失败
- 删除数组时断言失败
- c++ sort() 函数对于<algorithm>整数数组的大小(元素数)>10^7 个元素的大输入是否失败?
- 返回指向指针数组的指针获取下一个元素失败
- 对象的c++数组,初始化失败
- C++类模板构造函数 -- 重载引用 (U&) 与数组 (U*) 失败
- 检索静态char*数组失败
- Qt Qvariantlist转换为javascript数组失败
- 动态分配对象数组失败
- BOOST/CSTDINT类型BOOST稀疏向量数组失败,为什么