2013-10-30 116 views
1

我有一个Qt(4.7)程序,它接受一个QByteArray,并在使用解析器将其转换为QVariant后,将其分解成QVariants列表。当我尝试使用toList()函数时,问题似乎出现了。我有一些与此类似:Qt QVariant toList不起作用

QVariant var = //whatever the value passed in is... 
std::cout << "Data = " << var.toString().toStdString() << std::endl; 
QList<QVariant> varlist = var.toList(); 
std::cout << "List Size = " << varlist.size() << std::endl; 

这将返回此:

Data = variant1 variant2 variant3 
Size = 0 

在该尺寸应明确为3。有没有人有一个想法是什么我可能做错了什么?谢谢!

+0

“无论传入的值是...”是整个点。传入的价值是什么?看起来像**不是** QVariant包装'QList >'。 – peppe

回答

0

所以,我不知道为什么,但是当我把我上面指定到一个单独的功能,即QList<QVariant> myClass::ToList(QVariant v){return v.toList();},然后调用varlist = myClass::ToList(v)的命令,它的工作原理。仍然不是原来的方式,但这种方式很好。猜猜我会把它记到Qt的怪癖之一......

+1

您是否尝试过第一个示例而未调用toString()?也许QVariant :: toString()中有一个错误? – tharibo

+0

@tharibo本来我就是这么想的,toString这一行只是一个打印行,用来说明这个时候的数据是什么。尽管如此,我仍然没有尝试过,因为我仍然不知道它是什么,并且愿意尝试任何事情来弄清楚哈哈。可悲的是,没有改变 – thnkwthprtls

2

toList的()的文档表示:

返回所述变体作为QVariantList如果所述变体具有用户类型()QMetaType :: QVariantList或QMetaType :: QStringList中;否则返回一个空列表。

我的猜测是,您的变体的userType()既不是这两个。

您可能需要以不同方式构建您的变体,例如,

QVariantList list; 
list << variant1 << variant2 << variant3; 
QVariant var = list; 
+0

谢谢,虽然问题是我没有单独变量的单独变量;他们都被带到了程序中(他们实际上最初是一个QByteArray,它被QJson解析为一个QVariant),这就是为什么我需要它作为列表来单独访问它们的原因。有没有办法通过这种方式? – thnkwthprtls

+1

在这种情况下,您手动需要按照组成的方式分解字节数组。也许你也可以使用QJson。 –

+0

你需要检查'var.type()'的值。似乎'QJson'返回的不是变体列表。如果问题仍然存在,请显示'var.type()'值,原始json数据和用于解析的代码。 –